Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Variable überspringen
#1
Hallo Member,

Ich habe eine Frage zum überspringen einer Schleife im Code.

Und zwar soll (in der gelb markierten Zeile) das Dokument nur dann geöffnet werden, wenn es für dieses "k" auch vorhanden ist.
Kann mir da einer weiterhelfen?


[
Bild bitte so als Datei hochladen: Klick mich!
]



Gruß
Tim
Antworten Top
#2
Hallo Niker,

auf den ersten Blick scheint es an mehrer Stellen 'etwas ungewöhnlich' zu sein. M.E. reicht es nicht vor die gelbe Zeile eine if-Abfrage zu setzen.

Bitte schildere deine Aufgabenstellung, am besten mit einem kleinen Beispiel und lade den gesamten vba-Code in das entsprechende Fenster (mit aktivem java das 'script'-Symbol in der Leiste). Ein Bild ist recht schwer zu lesen.


Mfg
Antworten Top
#3
Code:
Option Explicit


Dim Arbeitspfad As String
Dim AktuellesWorkbook As String
Dim WorkbookDatenquelle As String
Dim AktuellesBlatt As String

Sub BerechnungKanal1()


Dim i As Integer
Dim j As Integer
Dim k As Integer


Arbeitspfad = ThisWorkbook.Path
AktuellesWorkbook = ActiveWorkbook.Name
AktuellesBlatt = ActiveSheet.Name

For k = 1 To 50


'WorkbookDatenquelle = "2aXHzFFTVorlageBearbeitung.xlsm"  'Org

WorkbookDatenquelle = "2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm"
k = k

   For i = 1 To Workbooks.Count
       If Workbooks(i).Name = WorkbookDatenquelle Then
           Exit For
       ElseIf i = Workbooks.Count Then
      '  Workbooks.Open Filename:=Arbeitspfad & "\2aXHzFFTVorlageBearbeitung.xlsm"           'org
               Workbooks.Open Filename:=Arbeitspfad & "\2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm"           'Excelspreadsheet mit Makros
               
               Workbooks(AktuellesWorkbook).Activate
               
        End If
      Next i

With Workbooks(AktuellesWorkbook).Worksheets(AktuellesBlatt)


Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(2, 10) = k * 5
'falls Blatt aktualisiert wird

.Cells(1, (i - 1) * 3 + 2) = k * 5

For j = 1 To 10
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 13 To 14
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 17 To 18
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 22 To 31
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 33 To 42
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 45 To 47
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)



Next j
End With

Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm").Save
Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm").Close
Next k


End Sub
Hallo Fennek


Habe gedacht, es würde sich schon erklären, sorry :(

Hier mein Code.

Für k werden oben bis zu 50 Dateien geöffnet und unten wieder geschlossen.
Es kann allerdings sein, dass es absichtlich gar nicht 50, sondern eben nur 30 gibt und die restlichen 20 "k" einfach übersprungen werden sollen. An der Stelle stoppt Excel aber das Makro und bietet mir nur die Möglichkeit, den Prozess komplett zu beenden, oder zu debuggen.


Ist mein Problem bei Betrachtung des Codes verständlich geworden?
Antworten Top
#4
Hallo,

wenn Du schon mit Workbooks.count arbeitest, dann reicht es doch, die Schleife nur bis dahin laufen zu lassen:


Code:
For k = 1 To Workbooks.count
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo,

ich habe weiterhin probleme mit dem Code und werde nicht daran arbeiten, aber hier ist eine einfache Möglichkeig zu prüfen, ob eine Datei existiert:

Code:
Sub sFileExist()

sFile = "leo5.txt"
If dir("c:\temp\"& sFile) <> "" then msgbox "exist"
End sub

Mfg
Antworten Top
#6
Hallo,

ohne den Code auf überflüssiges zu analysieren könnte es wie folgt funktionieren:

Code:
Sub BerechnungKanal1()


Dim i As Integer
Dim j As Integer
Dim k As Integer


Arbeitspfad = ThisWorkbook.Path
AktuellesWorkbook = ActiveWorkbook.Name
AktuellesBlatt = ActiveSheet.Name

For k = 1 To 50


'WorkbookDatenquelle = "2aXHzFFTVorlageBearbeitung.xlsm"  'Org

WorkbookDatenquelle = "2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm"
If Dir(Arbeitspfad & "\" & WorkbookDatenquelle) <> "" Then  'neu Hinzugekommen ################################

  For i = 1 To Workbooks.Count
      If Workbooks(i).Name = WorkbookDatenquelle Then
          Exit For
      ElseIf i = Workbooks.Count Then
     '  Workbooks.Open Filename:=Arbeitspfad & "\2aXHzFFTVorlageBearbeitung.xlsm"           'org
       
              Workbooks.Open Filename:=Arbeitspfad & "\WorkbookDatenquelle"           'Excelspreadsheet mit Makros
             
              Workbooks(AktuellesWorkbook).Activate
             
       End If
     Next i

With Workbooks(AktuellesWorkbook).Worksheets(AktuellesBlatt)


Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(2, 10) = k * 5
'falls Blatt aktualisiert wird

.Cells(1, (i - 1) * 3 + 2) = k * 5

For j = 1 To 10
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 13 To 14
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 17 To 18
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 22 To 31
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 33 To 42
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)

Next j
For j = 45 To 47
.Cells(j + 3, 2) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 10)
.Cells(j + 3, 3) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 12)
.Cells(j + 3, 4) = Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung").Worksheets("Messwerte").Cells(j + 7, 13)



Next j
End With

Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm").Save
Workbooks("2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm").Close
End If   'neu hinzugekommen ##########################################################################################
Next k


End Sub


@Edgar
Workbooks.Count gibt die Anzahl der geöffneten Dateien wieder, deswegen kann Dein Vorschlag nicht funktionieren.
Gruß Atilla
Antworten Top
#7
Hallo atilla,

danke für die Aufklärung, wusste ich bis dato nicht.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#8
Danke für die Antworten.

Der Code stammt nicht ursprünglich von mir. Deswegen möchte ich "Überflüssiges", wenn auch nicht notwendig, gerne im Code stehen lassen.

@Atilla, was meinst Du mit "neu hinzugekommen"?

Ein letzter Versuch:
Das Makro öffnet (und schließt) mir die Dateien 2akHzFFTVorlageBearbeitung.

k soll den Bereich  5 - 250 in 5er Schritten abdecken.

Es kann allerdings passieren, dass es Dateien für k = 5, k = 10 und k = 80 gibt, der Rest allerdings fehlt.
Es sind also vorhanden 2a5HzFFTVorlageBearbeitung, 2a10HzFFTVorlageBearbeitung und 2a80HzFFTVorlageBearbeitung

Beispielsweise die Datei 2a40HzFFTVorlageBearbeitung existiert gar nicht.
Ich brauche allerdings den Durchlauf bis 80.
Bisher stoppt mir der Code ja bei 15, weil ja schon diese Datei nicht gefunden werden kann.
Antworten Top
#9
Hallo

teste doch einfach den Code, indem Du ihn gegen Deinen austauschst.

Neu hinzugekommen heißt, dass ich die kenntlich gemachten Zeilen in Deinem Code ergänzt habe, nur damit Du erkennst, was ich verändert habe.
Gruß Atilla
Antworten Top
#10
Hi,


ich würde das so angehen:


Code:
Option Explicit
Sub test()
Dim i As Long
Dim j As Long
Dim k As Long
Dim istDa As Boolean
Dim Arbeitspfad As String
Dim AktuellesBlatt As String
Dim wkbQ As Workbook
Dim wkbZ As Workbook
Dim wks As Worksheet
Arbeitspfad = ThisWorkbook.Path
wkbZ = ActiveWorkbook.Name
AktuellesBlatt = ActiveSheet.Name

For k = 1 To 50
istDa = False

        'WorkbookDatenquelle = "2aXHzFFTVorlageBearbeitung.xlsm"  'Org
    If Dir(Arbeitspfad & "\2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm") <> "" Then
        wkbQ = "2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm"
            For i = 1 To Workbooks.Count
                If Workbooks(i).Name = Str(wkbQ) Then istDa = True
            Next
            If istDa = False Then
                Set wkbQ = Workbooks.Open(Filename:=Arbeitspfad & "\2a" & 5 * k & "HzFFTVorlageBearbeitung.xlsm")           'Excelspreadsheet mit Makros
                Set wks = wkbQ.Sheets("Messwerte")
                Workbooks(wkbZ).Activate
            End If
            
    End If

    With wkbZ.Sheets(AktuellesBlatt)
        wks.Cells(2, 10) = k * 5 'falls Blatt aktualisiert wird
        .Cells(1, (i - 1) * 3 + 2) = k * 5

        For j = 1 To 10
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    
        For j = 13 To 14
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    
        For j = 17 To 18
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    
        For j = 22 To 31
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    
        For j = 33 To 42
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    
        For j = 45 To 47
            .Cells(j + 3, 2) = wks.Cells(j + 7, 10)
            .Cells(j + 3, 3) = wks.Cells(j + 7, 12)
            .Cells(j + 3, 4) = wks.Cells(j + 7, 13)
        Next j
    End With

    wkbQ.Save
    wkbQ.Close
Next k


End Sub


@atilla, vielleicht kannst Du mal drüber schauen.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste