Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1192to1196
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Bedingung innerhalb einer "Do While"-Schleife
w.k.schmidt@gmx.de
Hallo, Forum,
ich möchte gerne zum Jahreswechsel meine Mitabeitertabellen mit einem Makro bearbeiten. Hierfür gebe ich ein das betreffende Verzeichnis an, in dem sich aber auch die Konsolidierungstabelle befindet. Es gelingt mir mit meinem Modul nicht, alle Tabellen im Verzeichnis ohne die Konsolidierungstabelle zu bearbeiten. Wahrscheinlich ein Klacks für die Profis, ich bekomme bei dem unten stehenden Code den Laufzeitfehler 9, Index ausserhalb des gültigen Bereichs
.

Sub OpenWkb()
Dim sFile As String, sPath As String
Application.ScreenUpdating = False
sPath = InputBox( _
prompt:="Pfad:", Default:="c:\eigene dateien")
If Right(sPath, 1)  "/" Then
sPath = sPath & "\"
End If
sFile = Dir(sPath & "*.xls")
Do While sFile  ""
If Not Workbooks(sFile).Name = "Konsolidierung_Mitarbeiter.xls" Then _
Workbooks.Open sPath & sFile
Application.Run "VBATestmappe.xlsm!NeuesJahr"
ActiveWorkbook.Close savechanges:=True
sFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub

Für Hilfe wäre ich sehr dankbar!
Freundliche Grüße
Matthias

  • AW: Bedingung innerhalb einer "Do While"-Schleife
    05.01.2011 23:48:56
    Gerd
    Hallo Matthias,
    mit Workbooks("xyz").Name kannst Du eine Datei ansprechen, die bereits geöffnet ist.
    Versuche es mit
    If sFile "Konsoliderung_Mitarbeiter.xls" Then
    Gruß Gerd
    ...Besser wäre wohl 1 vollständiges If...Then...
    06.01.2011 00:34:11
    Luc:-?
    …Else-Konstrukt, Gerd & Matthias
    
    If Not Workbooks(sFile).Name = "Konsolidierung_Mitarbeiter.xls" Then
    Workbooks.Open sPath & sFile
    Application.Run "VBATestmappe.xlsm!NeuesJahr"
    ActiveWorkbook.Close SaveChanges:=True
    sFile = Dir()
    End If
    
    innerhalb von Do While…Loop, das so auch ein While…Wend sein könnte. Ohne Notwendigkeit einer Abbruchbedingung reichte das. Das If-Konstrukt ist ja nur 'ne Auslassungs-, keine Abbruchbedingung. Allerdings setzt das voraus, dass sFile wenigstens eine Datei enthält. Komisch kommt's mir ohnehin vor — normalerweise benötigt man ja ein Konstrukt, dass eine Datei nach der anderen aufruft wie bspw For Each…Next. Passiert das hier? Ich weiß ja nicht…! Und dann noch sFile = Dir()
    Der Fehler deutet jedenfalls darauf hin, dass (irgendwann) keine Datei bereit gestellt wurde.
    Gruß Luc :-?
    Anzeige
    AW: If...Then...
    06.01.2011 00:44:56
    Gerd
    Hallo Luc,
    vollständige If .. then .. End If - Bedingung stimmt. Dies hatte ich übersehen.
    Dennoch kannst Du auf ein (noch) nicht geöffnetes Workbook nicht mit der Name-Eigenschaft zugreifen.
    Gruß Gerd
    Ja, da hast du recht! Wenigstens "Öffnen im...
    06.01.2011 14:25:53
    Luc:-?
    …Hintergrund", Gerd…
    Scheint mir recht ungeeignet zu sein, die Proz…
    Gruß Luc :-?
    AW: Ja, da hast du recht! Wenigstens "Öffnen im...
    06.01.2011 16:40:31
    Josef

    Hallo Luc:-?,
    warum, die Prozedur läuft astrein, er hatte nur die Prüfung auf den Dateinamen falsch aufgezogen.

    Gruß Sepp

    Anzeige
    Na gut, kam mir merkwürdig vor, aber zZ...
    06.01.2011 17:06:32
    Luc:-?
    …beschäftigt mich Anderes, da bin ich bei so etwas nicht mehr ganz auf der Höhe… ;-)
    Gesundes Neues, Sepp!
    Gruß Luc :-?
    AW: Bedingung innerhalb einer "Do While"-Schleife
    06.01.2011 00:44:47
    Josef

    Hallo Matthias,
    wie Gerd schon richtig bemerkt hat, muss "Workboos(sFile).name" auf eine Fehler laufen, weil du diese Datei ja noch nicht geöffnet hast.
    Folgender Code sollte laufen.

    Sub OpenWkb()
      Dim objWb As Workbook
      Dim strFile As String, strPath As String
      
      On Error GoTo ErrExit
      
      Application.ScreenUpdating = False
      
      strPath = InputBox("Pfad:", Default:="c:\eigene dateien")
      
      strPath = IIf(Right(strPath, 1) = "\", strPath, strPath & "\")
      
      strFile = Dir(strPath & "*.xls")
      
      Do While strFile <> ""
        If strFile <> "Konsolidierung_Mitarbeiter.xls" Then
          Set objWb = Workbooks.Open(strPath & strFile)
          Application.Run "VBATestmappe.xlsm!NeuesJahr"
          objWb.Close True
        End If
        strFile = Dir
      Loop
      
      ErrExit:
      Application.ScreenUpdating = True
      Set objWb = Nothing
    End Sub
    Gruß Sepp

    Anzeige
    AW: Bedingung innerhalb einer "Do While"-Schleife
    06.01.2011 11:31:03
    Matthias
    Hallo, Luc:-?, Gerd und Sepp,
    erstmal ganz herzlichen Dank für Eure Antworten, das ging ja schneller als ich dachte! Nachdem Eure Antworten noch in der Nacht kamen, finde ich meine Annahme bestätigt, dass die Programmier-und Computerbegeisterten dazu verdammt sind, Nachts ihre Arbeit zu verrichten, um den häuslichen Frieden nicht zu gefährden, oder seid Ihr alles Nachteulen? ;-))
    @Sepp: ist die savechanges-angabe überflüssig, wenn man das Workbook der Variable objwb zuweist und dann schließt?
    @ Luc:-?: wenn die Konsolidierungstabelle aus dem Verzeichnis genommen wird, läufts ohne Probleme durch, nur ist die Tabelle mit Passwort geschütz, deswegen kam ein Laufzeitfehler auch dann, wenn ich die Bedingung mit Namensprüfung nach der Öffnen-Anweisung eingefügt habe. Ansonsten bin ich wie viele Amateure ein Copy and Past-Spezialist, wo leider sicherlich Fragmente von nicht benötigtem oder falschem Code übrig bleiben ( ich dachte, dass sFile = Dir() in Verbindung mit Loop die nächste Tabelle aufruft, habs noch nicht ohne probiert!)
    @ Gerd: danke, da hab ich wieder was dazugelernt mit dem Öffnen,des WBk und dann erst die Name-Eigenschaft zu verändern,
    ganz herzlichen Dank nochmal, ich werds gleich mal austesten und poste nochmal das Ergebnis!
    Erfolgreiches und gesundes Neues Jahr wünscht
    Matthias
    Anzeige
    AW: Bedingung innerhalb einer "Do While"-Schleife
    06.01.2011 11:51:06
    Josef

    Hallo Mtthias,
    eigentlich ist es überflüssig, aber ich setze diesen Parameter fast immer - sicher ist sicher.

    Gruß Sepp

    AW: Bedingung innerhalb einer "Do While"-Schleife
    07.01.2011 10:59:07
    Matthias
    Hallo nochmal,
    Modul läuft jetzt wie zu erwarten reibunglos durch,
    allen Mitwirkenden nochmals vielen Dank!
    Freundliche Grüße
    Matthias

    304 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige