Avatar billede AndersVesteroe Nybegynder
12. august 2013 - 13:43 Der er 6 kommentarer

VBA - Stop af Loop funktion.

Hej!

Jeg har lavet en Loop funktion, hvor der på den ene eller anden måde går noget galt efter data er kopieret ind. Den skriver ikke en fejl til mig, men Excel går "kold" dvs. (Svare ikke) vises og Excel lukker. Jeg har prøvet at reducere mængden af data fra knap 3500 linjer til 33, med samme resultat.

Jeg har søgt blandt "loop" spørgsmål her inde og resoneret mig frem til virkemåde. Det kan bestemt være der fejlen ligger! 


Jeg har haft MSGbox (som også ses i programmet) som kom op ved kørsel af de forskellige IF funktioner, så jeg er overbevist om at disse fungere (dog skal man aldrig sige aldrig)

Nogle der har forstand på denne funktion?

Sub sortereData()
'
' sortereData
'

Do

Sheets("Import").Select
                           
If ActiveSheet.range("A12").Value = "INDEX,OPR" Then

    range("D1:D11").Select
    Selection.copy
    Sheets("data").Select
    range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    range("A1").Select
    Selection.End(xlDown).Select
    Sheets("Import").Select
    range("A1:D11").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    range("A1").Select
    Sheets("Import").Select

Else
End If

If ActiveSheet.range("A12").Value = "STOP TOOL" Then
' fejl ved dobbelt værktøjsskifts registering

    range("A9:D11").Select
    Selection.Delete Shift:=xlUp
    range("A1").Select

' MsgBox ("Der er dobbelt vkt skift på NMP:" & ActiveSheet.range("D3").Value & " & Tool" & ActiveSheet.range("D6").Value)
   
' copy cyklus

    Sheets("Import").Select
    range("D1:D11").Select
    Selection.copy
    Sheets("data").Select
    range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    range("A1").Select
    Selection.End(xlDown).Select
    Sheets("Import").Select
    range("A1:D11").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    range("A1").Select
    Sheets("Import").Select
Else
End If

If ActiveSheet.range("A12").Value = "MASKIN" Then
' fejl ved manglende værktøjsskifts registering

' Indsæt andet kendt data
' MsgBox ("data mangler ved VKT slut tool ved NMP:" & ActiveSheet.range("D3").Value & "& Tool" & ActiveSheet.range("D6").Value)

    Rows("9:9").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    range("A9").Select
    ActiveCell.FormulaR1C1 = "STOP TOOL"
    range("B9").Select
    ActiveCell.FormulaR1C1 = "NR"
    range("C9").Select
    ActiveCell.FormulaR1C1 = ":"
    range("D9").Select
    ActiveCell.FormulaR1C1 = "=R[-3]C"
    range("A10").Select
    ActiveCell.FormulaR1C1 = "DATO"
    range("C10").Select
    ActiveCell.FormulaR1C1 = ":"
    range("D10").Select
    ActiveCell.FormulaR1C1 = "=R[8]C"
    range("A11").Select
    ActiveCell.FormulaR1C1 = "KLOKKEN"
    range("C11").Select
    ActiveCell.FormulaR1C1 = ":"
    range("D11").Select
    ActiveCell.FormulaR1C1 = "=R[8]C"
    range("A12").Select

' copy cyklus

    Sheets("Import").Select
    range("D1:D11").Select
    Selection.copy
    Sheets("data").Select
    range("A1").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    range("A1").Select
    Selection.End(xlDown).Select
    Sheets("Import").Select
    range("A1:D11").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    range("A1").Select
    Sheets("Import").Select


Else
End If
Loop Until ActiveSheet.range("D1").Value = 0

End Sub


Celle D1 har værdien [tal.tal]
Avatar billede finb Ekspert
12. august 2013 - 14:50 #1
"Else
End If"

skal være:
else if
Avatar billede AndersVesteroe Nybegynder
12. august 2013 - 15:15 #2
else if er ikke en funktion (siger mit excel 2013) så den bliver markeret RØD

ellers tak for budet...
Avatar billede kabbak Professor
12. august 2013 - 21:15 #3
jeg har rettet i koden, men ikke testet, da jeg ikke har data.


Sub sortereData()
'
' sortereData
'

Do

Sheets("Import").Select
  Select Case Range("A12")
 
Case Is = "INDEX,OPR"

    Range("D1:D11").Copy
    Sheets("data").Select
    Range("A1").End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("A1").Select
    Selection.End(xlDown).Select
    Sheets("Import").Range("A1:D11").Delete Shift:=xlUp
    Sheets("Import").Select
    Range("A1").Select
   
Case Is = "STOP TOOL"
' fejl ved dobbelt værktøjsskifts registering

    Range("A9:D11").Delete Shift:=xlUp
    Range("A1").Select

' MsgBox ("Der er dobbelt vkt skift på NMP:" & ActiveSheet.range("D3").Value & " & Tool" & ActiveSheet.range("D6").Value)
   
' copy cyklus

    Sheets("Import").Range("D1:D11").Copy
    Sheets("data").Select
    Range("A1").End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("A1").End(xlDown).Select
   
    Sheets("Import").Select
    Range("A1:D11").Delete Shift:=xlUp
    Sheets("Import").Select
Range("A1").Select

Case Is = "MASKIN"
' fejl ved manglende værktøjsskifts registering

' Indsæt andet kendt data
' MsgBox ("data mangler ved VKT slut tool ved NMP:" & ActiveSheet.range("D3").Value & "& Tool" & ActiveSheet.range("D6").Value)

    Rows("9:9").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 
    Range("A9").FormulaR1C1 = "STOP TOOL"
    Range("B9").FormulaR1C1 = "NR"
    Range("C9").FormulaR1C1 = ":"
    Range("D9").FormulaR1C1 = "=R[-3]C"
    Range("A10").FormulaR1C1 = "DATO"
    Range("C10").FormulaR1C1 = ":"
    Range("D10").FormulaR1C1 = "=R[8]C"
    Range("A11").FormulaR1C1 = "KLOKKEN"
    Range("C11").FormulaR1C1 = ":"
    Range("D11").FormulaR1C1 = "=R[8]C"
    Range("A12").Select

' copy cyklus

    Sheets("Import").Select
    Range("D1:D11").Copy
    Sheets("data").Select
    Range("A1").End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("A1").End(xlDown).Select
    Sheets("Import").Select
    Range("A1:D11").Delete Shift:=xlUp
   
    Sheets("Import").Select
  Range("A1").Select

End Select

Loop Until ActiveSheet.Range("D1") = 0 Or ActiveSheet.Range("D1") = ""

End Sub
Avatar billede svla Mester
12. august 2013 - 21:17 #4
Uden og kan gennemskue din kode vil jeg foreslå at du lige inden koden End Sub indsætter følgende:
    MsgBox "OK"
Hvis denne meddelelsesbox ikke kommer på skærmen, er det fordi din loop bliver ved med og kører/gentage sig, så er problemet måske denne linie i din kode:
    Loop Until ActiveSheet.range("D1").Value = 0
Din loop kører jo endtil celle D1 får/har værdien 0
Avatar billede AndersVesteroe Nybegynder
12. august 2013 - 22:47 #5
Kabbak: For samme fejl med at Excel ikke svare..

Svla: Jeg tror du er inde på noget af det rigtige... Excel går i selv-sving da den gentager sig igennem hele arket, og det magter mig pc ikke... Jeg har prøvet at indsætte
  Loop Until ActiveSheet.range("D1").Value = 0 

og for fejlen: Loop without Do ; hvilket jeg tror kommer af at man ikke kan lave loop without funktion når jeg har så mange If statment inde. Jeg har brugt den før og har været glad for at bruge den funktion, så var lidt flad på ideér da det ikke virkede!
Avatar billede svla Mester
13. august 2013 - 21:07 #6
Hej igen

Hvis du har opfattelsen af at din loop ikke stopper, så prøv følgende:

Lige inden din kode:
"Loop Until ActiveSheet.range("D1").Value = 0

Indsætter du følgende:
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "0"

Det bevirker at lige før din loop når afslutningen sætter den værdien  i D1 til 0, hvis så din loop nu stopper er der det galt at værdien i celle D1 ikke bliver sat til 0 på noget tidspumnkt inden loop'en starter eller når den kører.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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