Avatar billede Steinbeck Mester
18. februar 2020 - 14:45 Der er 6 kommentarer

nested loop

Hej,

Jeg har lavet mig et loop for første gang nogensinde.

I dette loop skal første del af loopet kun udføres hver gang værdien i kolonne A eller C ændrer sig. Den anden del af loopet udføres så indtil en af de værdier ændrer sig.
Min tabel kunne se ud som nedenfor:
Rækkenavne    Artnr    Bogføringsdato    LVP    Sum af Menge
500148    7413    10.02.2020    29,95    1080
500161    7093    07.02.2020    14,95    970
500228    2116            10.02.2020    7,95            240
500228    7221    10.02.2020    43,75    225

Er der nogen der kan hjælpe?
Avatar billede Steinbeck Mester
18. februar 2020 - 14:56 #1
Jeg forestiller mig noget i stil med et statement der siger at hvis værdien i en celle er forskellig fra cellen ovenfor så skal køre første del af loopet ellers skal den fortsætte til anden del af loopet. Men lige hvordan jeg skal skrive det er jeg ret meget i tvivl om.
Avatar billede Jan K Ekspert
18. februar 2020 - 15:37 #2
Det er nemmere, hvis du vider hvordan dine loops ser ud
Avatar billede thomas_bk Ekspert
18. februar 2020 - 15:47 #3
Hvad skal handlingen være i loops'ene?
Avatar billede Steinbeck Mester
18. februar 2020 - 15:56 #4
Beklager jeg ikke er klar over hvordan jeg lægger koden pænt ind.

Lub loop_sap()

Dim i As Long, Lastrow As Long

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    With Sheets("VI")
        Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

Dim SapGuiAuto As Object
    Dim SapApplication As Object
    Dim Connection As Object
    Dim session As Object
    Dim VALU1 As String
    Set SapGuiAuto = GetObject("SAPGUI")
    Set SapApplication = SapGuiAuto.GetScriptingEngine
    Set Connection = SapApplication.Children(0)
    Set session = Connection.Children(0)
    Application.DisplayAlerts = False

For i = 2 To Lastrow

Første del af loop

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nmb0a"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/radRM07M-WVERS2").Select
session.findById("wnd[0]/usr/ctxtMKPF-BLDAT").Text = Sheets("VI").Cells(i, 3).Value
session.findById("wnd[0]/usr/ctxtMKPF-BUDAT").Text = Sheets("VI").Cells(i, 3).Value
session.findById("wnd[0]/usr/ctxtRM07M-BWARTWE").Text = "901"
session.findById("wnd[0]/usr/ctxtRM07M-WERKS").Text = "0900"
session.findById("wnd[0]/usr/ctxtRM07M-LGORT").Text = "0001"
session.findById("wnd[0]/usr/ctxtAM07M-LIFNR").Text = Sheets("VI").Cells(i, 1).Value
session.findById("wnd[0]").sendVKey 0

Loopet skal deles her. altså denne del skal udføres så længe værdierne ikke ændrer sig. ændrer de sig skal første del igangsættes igen

session.findById("wnd[0]/usr/sub:SAPMM07M:0241/ctxtMSEG-MATNR[0,7]").Text = Sheets("VI").Cells(i, 2).Value
session.findById("wnd[0]/usr/sub:SAPMM07M:0241/txtMSEG-ERFMG[0,26]").Text = Sheets("VI").Cells(i, 5).Value
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 12
session.findById("wnd[0]").sendVKey 12

' Bogfør
'session.findById("wnd[0]").sendVKey 11



'session.findById("wnd[1]/usr/btnSPOP-OPTION2").press

Next i
End With

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub
Avatar billede thomas_bk Ekspert
19. februar 2020 - 08:36 #5
Jeg kan desværre ikke tolke din kode, måske andre kan :-)

Så jeg vil blot lige foreslå, hvis du har tid, at du måske kigger lidt på Excels stærke værktøj til at hente og transformere data (get data and transform).
Det er under data menuen i excel og der er mange vejledninger online.
Avatar billede Steinbeck Mester
19. februar 2020 - 09:47 #6
Hej Thomas,

Min kode bogfører data i SAP. Så det er ikke så meget selve koden jeg skal bruge hjælp til. Kun hvordan jeg får lagt det ekstra loop ind før næste del af koden.
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

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