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
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
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
31.03.2016, 14:07
(Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2016, 14: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.
|