Avatar billede janvogt Praktikant
07. februar 2002 - 14:06 Der 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.
07. februar 2002 - 14:25 #1
Hmmm.... spændende opgave.
Avatar billede bak Forsker
07. februar 2002 - 14:30 #2
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
Avatar billede bak Forsker
07. februar 2002 - 14:31 #3
Jeg mener selvfølgelig B3, når jeg skriver B1 :-)
Avatar billede rvm Nybegynder
07. februar 2002 - 14:35 #4
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
   
    End If
Set rCell = Nothing
End Sub
07. februar 2002 - 15:01 #6
rvm>> den kører ikke i xl97 (så vidt jeg husker, så bruger janvogt xl97)
Avatar billede rvm Nybegynder
07. februar 2002 - 15:03 #7
Jeg har lige tjekket i version 2000 og 2002 - der kører den, men nu tjekker jeg også i 97 *S*
Avatar billede janvogt Praktikant
07. februar 2002 - 15:03 #8
>>>bak
Jeg har prøvet at lave en formel, som tvinger Excel til at genberegne, og det gør den også fint, men den trigger stadig ikke makroen.

>>>rvm
Hos mig kører den ikke :-(
Har du prøvet at lave en datavalideringsliste på celle B3?
Avatar billede rvm Nybegynder
07. februar 2002 - 15:04 #9
Du har ret flemmingdahl - i 97 kører den ikke - hmm
Avatar billede bak Forsker
07. februar 2002 - 15:04 #10
Baklager mit forkerte svar. Flemming har ret. Jeg testde kun på 2000 men i 97 går det galt.
Avatar billede janvogt Praktikant
07. februar 2002 - 15:10 #11
Korrekt flemming, jeg bruger stadig 97 :-)
07. februar 2002 - 15:13 #12
Det må du så have gjort noget ved !!!
Avatar billede rvm Nybegynder
07. februar 2002 - 15:13 #13
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 :-(
07. februar 2002 - 15:16 #14
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!!!
Avatar billede janvogt Praktikant
07. februar 2002 - 15:18 #15
Hmm, nu overvejer jeg virkelig at skifte til 2000.

Jeg kunne selvfølgelig lave en userform med en rulleliste ... men det kræver et par ekstra tryk, så helt så smart er det ikke.

Gad vide om det virker, hvis cellen bliver opdateret med en listboks fra kontrolelementer/formularer .....
Avatar billede rvm Nybegynder
07. februar 2002 - 15:25 #16
"Gad vide om det virker, hvis cellen bliver opdateret med en listboks fra kontrolelementer/formularer ..... "

Det har jeg lige testet med en kombinationsboks - det virker...
07. februar 2002 - 15:27 #17
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
Avatar billede bak Forsker
07. februar 2002 - 15:35 #18
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
Avatar billede bak Forsker
07. februar 2002 - 15:53 #19
Det forudsætter selvfølgelig en beregning på cellen
Avatar billede janvogt Praktikant
08. februar 2002 - 15:32 #20
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 :-)

God weekend!
08. februar 2002 - 15:44 #21
Så er der jo virkelig opnået noget!  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester