Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketEn søgeopgave - Variant

 Besvar Besvar
Forfatter
ZXCVB Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 12.Mar.2012
Land: DK
Status: Offline
Point: 92
Direkte link til dette indlæg Emne: En søgeopgave - Variant
    Sendt: 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
Til top



Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 601
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 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
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 601
Direkte link til dette indlæg Sendt: 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
Til top
ZXCVB Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 12.Mar.2012
Land: DK
Status: Offline
Point: 92
Direkte link til dette indlæg Sendt: 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
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 601
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 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
Til top
ZXCVB Se dropdown
Bronze bruger
Bronze bruger
Avatar

Medlem: 12.Mar.2012
Land: DK
Status: Offline
Point: 92
Direkte link til dette indlæg Sendt: 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
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 601
Direkte link til dette indlæg Sendt: 08.Sep.2016 kl. 08:47
Super! Godt du kunne bruge det Smile


Mvh Max
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk