Registriert seit: 22.03.2016
Version(en): Office 2010
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
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 22.03.2016
Version(en): Office 2010
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?
Registriert seit: 13.04.2014
Version(en): 365, 2019
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.
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 13.04.2014
Version(en): 365, 2019
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.
Registriert seit: 22.03.2016
Version(en): Office 2010
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 13.04.2014
Version(en): 365, 2019
31.03.2016, 13:07
(Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016, 13:07 von BoskoBiati.)
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.
|