07. februar 2002 - 14:06Der er
18 kommentarer og 3 løsninger
VBA opdatering
Jeg har et ark, hvor jeg bruger Worksheet_Change hændelsen til at køre en makro. Makroen ser sådan ud:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCell As Range Set rCell = Range("B3") If Not Intersect(Target, rCell) Is Nothing Then Makro End If Set rCell = Nothing End Sub
Hvis jeg opdaterer/ændrer target-cellen ved at skrive direkte i cellen køres makroen fint, men i min situation ligger der en datavaliderings-liste til grund for opdateringen af cellen og så opfatter Excel det åbenbart ikke som et Worksheet-Change.
Hvis jeg efter at have valgt et emne på datavalideringslisten stiller mig på cellen og trykker F2+ENTER kører makroen igen som den skal.
Hvorfor opfører Excel sig sådan, og hvilken kode skal der til for at omgås problemet?
Jeg har eksperimenteret med Application.Calculation = xlCalculationAutomatic og andre, men uden held. Så det jeg skal bruge er måske koden for F2+ENTER.
Det er fordi din ændring ikke tvinger excel til en beregning på celle B1. Prøv at tvinge excel til at lave en beregning der includerer B1. Fx i en tilfældig celle at skrive =offset(tilfældig celle; B1;0) så kører din makro. Offset er en flygtig excel-funktion der skal genberegnes altid, derfor har jeg lige valgt den
Jeg har lige prøvet og koden kører faktisk, men IF-Then sætningen giver et falsk resultat - derfor ser det ud som omden ikke kører.
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCell As Range MsgBox "Kører1" Set rCell = Range("B3") If Not Intersect(Target, rCell) Is Nothing Then
Det kan godt være jeg nu er lidt lavpraktisk, men kan du ikke bare lave en kombinationsboks... men det løser selvfølgelig ikke problemt... jeg kunne ikke få flemmingdahl's link til at virke :-(
rvm>> hehe - det kan jeg heller ikke... men det beskriver, at Microsoft anerkender fejlen.
Svaret til den kære Jan må være: Sorry - nu ER det tid til en ny version, med mindre du kan få en til at kode den manglende event på brugen af en datavalideringsliste!!!
Det virker ikke med en formular, men med kontrolelementet ListBox - Yes
Eks. Private Sub ListBox1_Change() Range("B3").Value = ListBox1.ListIndex End Sub
Private Sub Worksheet_Activate() Dim rCell As Range ListBox1.Clear For Each rCell In Range("A1:A7") ListBox1.AddItem rCell.Value Next rCell End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCell As Range Set rCell = Range("B3") If Not Intersect(Target, rCell) Is Nothing Then MsgBox "Det virker" End If Set rCell = Nothing End Sub
Måske kan du bruge denne model på thisworkbook Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If ActiveCell.Address = "$B$3" Then Call test End Sub
Tak for hjælpen. Selvom der rent faktisk ikke var så megen hjælp at hente fik vi da en god diskussion. Ihvertfald kom jeg et stort skridt nærmere mod Excel 2000 eller XP :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.