Print side | Luk vindue

En søgeopgave - Variant

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=2695
Udskrevet den: 04.Feb.2025 kl. 08:04


Emne: En søgeopgave - Variant
Besked fra: ZXCVB
Emne: En søgeopgave - Variant
Posteringsdato: 06.Sep.2016 kl. 17:08
Spørgsmålet er en fortsættelse af tidligere <En søgeopgave> 24-8-16

Her er koden som ikke virker i denne variant :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$AE$13" Then Target.Address = "$AB$7"

    If Target.Value > 25 And Target.Value < 1053 Then
    
        ActiveWindow.ScrollRow = Target.Value
        
    Else
    
        MsgBox "Ugyldigt rækkenummer"
    
    End If

End If

End Sub

FORDI : jeg skriver et kontonummer i AE13 og rækkenummer beregnes i AB7 : <=SLÅ.OP(AE13;AE26:AE1053;AC26:AC1053) >

Løsning : hver gang der skrives i AE13 skal der rykkes til rækken beregnet i AB7.



-------------
Med venlig hilsen

Knud Evendorff



Svar:
Besked fra: maxzpad
Posteringsdato: 06.Sep.2016 kl. 20:38
Hej Knud

Jeg tror, det ikke virker, fordi du ikke kan manipulere med Range-objektet, der hedder Target.

Target er det Range/den celle, som du ændrer, og jeg tror ikke, du kan ændre adressen/cellereferencen fra den, som Excel selv bestemmer på baggrund af hændelsen Worksheet_Change.

Prøv følgende:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$AE$13" Then

    If Me.Range("AB7").Value > 25 And Me.Range("AB7").Value < 1053 Then
    
        ActiveWindow.ScrollRow = Me.Range("AB7").Value
        
    Else
    
        MsgBox "Ugyldigt rækkenummer"
    
    End If

End If

End Sub


Mvh Max


Besked fra: ZXCVB
Posteringsdato: 06.Sep.2016 kl. 22:38
Hej Max

Det virker perfekt, men jeg glemte i min opgavedefinition en stor detalje.

Jeg bruger Manuel beregning i projektet, og det gør jo en stor forskel.

forslag :
 - Kan man i VB koden sætte en option så dette Ark bliver beregnet Automatisk.
 - Kan man sætte en variabel til : <=SLÅ.OP(AE13;AE26:AE1053;AC26:AC1053) > ind i VB koden
 - Eller ?


-------------
Med venlig hilsen

Knud Evendorff


Besked fra: maxzpad
Posteringsdato: 07.Sep.2016 kl. 08:54
Hej Knud

Generelt kan man ALT det med VBA-koden, som man også kan udføre "hands-on" i Excel-programmet.

Dvs. man kan også godt (gen)beregne alle ark, et enkelt ark eller blot et celleområde i et ark (helt ned til en enkelt celle). Ønsker du eksempelvis at beregne cellen "AB7", vil det kunne udføres således:

     Me.Range("AB7").Calculate

Indsæt ovenstående kodelinje før denne linje:

     ActiveWindow.ScrollRow = Me.Range("AB7").Value

Man kan sætte variablen, som du omtaler, på denne måde:

     Dim MinVariabel
     MinVariabel = WorksheetFunction.Lookup(Target.Value, Me.Range("AE26:AE1053"), Me.Range("AC26:AC1053"))

Herefter kan du bruge variablen således: ActiveWindow.ScrollRow = MinVariabel

Bruger du variablen, slipper du for at genberegne arket/cellen som omtalt oven for.



Mvh Max


Besked fra: ZXCVB
Posteringsdato: 07.Sep.2016 kl. 19:07
Hej Max

Tak for svaret og løsningen. Jeg valgte den første - dog placerede jeg <Me.Range("AB7").Calculate> før aflusning, og jeg placerede et <calculate> sidst i koden. Arket er så blevet <automatik beregnet>, og da der er er et par celler mere i arket, der modulerer forskellige resultater, bliver disse også en indeholdt i <automatisk beregning>.

Jeg kvitterer derfor opgaven som løst. 


-------------
Med venlig hilsen

Knud Evendorff


Besked fra: maxzpad
Posteringsdato: 08.Sep.2016 kl. 08:47
Super! Godt du kunne bruge det Smile


Mvh Max



Print side | Luk vindue