1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Excel 2003 Makro Ausführung

Dieses Thema im Forum "Visual Basic 6.0, VBA & VBScript" wurde erstellt von Leola13, 23. Januar 2012.

  1. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    folgendes Makro :
    Code (Text):
    1. Sub aaa()
    2.  
    3.  
    4. Dim Zelle As Range
    5.  
    6.    
    7.      For Each Zelle In Workbooks("VBA SLI.XLS").Worksheets("SLI").Range("F4", "F" & Range("a65536").End(xlUp).Row)
    8.      
    9.         If Zelle = "XYZ" Then
    10.      
    11.             Workbooks("VBA SLI Aufgabe.XLS").Worksheets("Archiv").Rows(6).Insert
    12.             Zelle.EntireRow.Copy Destination:=Workbooks("VBA SLI Aufgabe.XLS").Worksheets("Archiv").Range("A6")
    13.    
    14.         Else
    15.        
    16.             b = b + 1
    17.        
    18.         End If
    19.      
    20.      Next Zelle
    21.  
    22. End Sub
    Funktioniert :
    - wenn ich ihn aus dem Editor starte (Ausführen - Sub ausführen ...)
    - wenn ich Einzelschritte durchführe (F8)

    Funktioniert nicht :
    -wenn ich aus der Datei VBA SLI heraus starte. Dann wird nach der ersten gefundenen Stelle, incl. Kopie, ohne Fehelrmeldung aufgehört.

    Was habe ich falsch gemacht ?

    Ciao Stefan
  2. Yaslaw

    Yaslaw n/a Moderator

    item: Aus welcher Datei fühsrt du das mit F8 aus?

    item: Wie willst du es aus VBA SLI ausführen? Mit einem Button? Mit F8?

    item: Es empfiehlt sich der Übersicht zuliebe die 2 Worksheets als Objekte zu defineren. Macht den Code lesbarer

    Code (Visual Basic):
    1. Sub aaa()
    2.  
    3. Dim Zelle As Range
    4. Dim wsSli AS Worksheet
    5. Dim wsArchiv As Worksheet
    6.  
    7.      'Objekte setzen
    8.     Set wsSli = Workbooks("VBA SLI.XLS").Worksheets("SLI")
    9.      Set wsArchiv = Workbooks("VBA SLI Aufgabe.XLS").Worksheets("Archiv")
    10.    
    11.      For Each Zelle In wsSli.Range("F4", "F" & Range("a65536").End(xlUp).Row)
    12.           If Zelle = "XYZ" Then
    13.                wsArchiv.Rows(6).Insert
    14.                Zelle.EntireRow.Copy Destination:=wsArchiv.Range("A6")
    15.           Else        
    16.                b = b + 1        
    17.           End If    
    18.      Next Zelle
    19.  
    20.      ' Objekte brav wieder aufräumen
    21.     Set Zelle = Nothing
    22.      Set wsSli = nothing
    23.      Set wsArchiv = Nothing
    24.  
    25. End Sub
  3. Zvoni

    Zvoni Erfahrenes Mitglied

    Ich bin mir jetzt nicht sicher, aber müssen Arbeitsmappen zur Laufzeit nicht per Workbooks.Open hinzugefügt werden?

    Also in der Art von
    Code (Visual Basic):
    1.  
    2. Set wbArchiv=Workbooks.Open("VBA SLI Aufgabe.XLS")
    3. Set wsArchiv=wbArchiv("Archiv")
    4. 'blablbalba
    5.  
    Wie gesagt, bin mir nicht sicher, da die Schreibweise
    Code (Visual Basic):
    1.  
    2. Set wsArchiv = Workbooks("VBA SLI Aufgabe.XLS").Worksheets("Archiv")
    3.  
    eigentlich den Zugriff auf ein Element der Workbooks-Auflistung beschreibt, welches vorher der Auflistung per Open hinzugefügt werden muss.

    P.S.: Wozu soll das b=b+1 gut sein?
  4. Yaslaw

    Yaslaw n/a Moderator

    Das open() ist glaub nur, wenn sie noch nicht offen sind. Ich geh eigentlich davon aus, dass dies bereits der Fall ist - wenn nicht, dann gibts hoffentlich ein Fehler.
  5. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    VBA SLI Aufgabe.XLS

    Gar nicht, bzw. ich verstehe die Frage nicht. (?)


    Okay.


    Beide Dateien sind auf. In "Schritt 2" sollen die Daten aus der geschlossenen Datei in VBA SLI Aufgaben.XLS kopiert werden.

    EIn Button ist noch nicht erstellt.
    Ziel ist es aus verschiedenen Projekt-Protokolldateien, die entsprechenden Dateinsätze, die wo mein Name drin steht, in eine "Übersichtsdatei" zu kopieren.

    Danke schon mal.

    Ciao Stefan
    Zuletzt von einem Moderator bearbeitet: 23. Januar 2012
  6. Yaslaw

    Yaslaw n/a Moderator

    Zum 2ten Punkt, den du nicht verstehst zitiere ich dich mal
    darum meine Frage
    Aber du beschreibst jetzt in das Problem selber
    Natürlich muss die Datei zuerst geöffnet werden. Zvoni hat beschrieben wie das geht.
  7. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    irgendwie ist heute ncht mein Tag.

    Beide Dateien sind geöffnet, ich bin in VBA SLI Aufgabe.XLS, starte das Makro und die Daten aus VBA SLI werden kopiert.

    Von Hand (F8 im Editor, Einzelschritte) funktioniert es, Makro Start im Editor funktioniert, bei Start des Makros in VBA SLI.XLS wird nur ein Datensatz kopiert.

    Irgendwann einmal, wenn ich ein wenig mehr kann, soll das Ganze laufen ohne die VBA SLI zu öffnen.

    Ich hoffe jetzt habe ich mich verständlich ausgedrückt.

    Ciao Stefan
  8. Yaslaw

    Yaslaw n/a Moderator

    Jepp hast du. Ich anscheinend nicht.

    Wenn das VBA SLI noch nicht offen ist, dann musst du es per VBA zuerst öffnen. Ansonsten findet es Excel nicht.
    Workbooks("VBA SLI.XLS") greift auf ein offenes Worbook zu. Ergo musst du mit Set wsSli = Workbooks.Open("C:\temp\VBA SLI.XLS") drauf zugreiffen

    Code (Visual Basic):
    1. Dim wbSli As Workbook
    2. Dim wsSli AS Worksheet
    3. Dim wsArchiv As Worksheet
    4.  
    5.      'Objekte setzen
    6.     Set wbSli = Workbooks.open("C:\Temp\VBA SLI.XLS")  'Oder wo das DDIng auch immer steckt
    7.     Set wsSli = wbSli.Worksheets("SLI")
    8.      Set wsArchiv = Workbooks("VBA SLI Aufgabe.XLS").Worksheets("Archiv")
    9. ...
    10.      Call wbSli.close
    11.  
  9. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    Nachtrag :

    Das Problem bleibt. Starte ich das Makro von VBA SLI Aufgabe.XLS wird nach dem ersten kopierten Datensatz aufgehört.

    Starte ich von VBA SLI funktioniert es.

    In beiden Fällen keine Fehlermeldung.

    Langsam verstehe ich nur Bahnhof.

    Ciao Stefan
  10. Yaslaw

    Yaslaw n/a Moderator

    Zeig mal dein aktueller Code.

    Schon mal mit debug nachgeschaut was passiert?

    Nachtrag im for each solltest du beim 2ten Range das Worksheet angeben, sonst nimmt er dort das aktuelle
    Code (Visual Basic):
    1. wsSli.Range("a65536").End(xlUp).Row
  11. Zvoni

    Zvoni Erfahrenes Mitglied

    Quizfrage: In welcher der beiden Arbeitsmappen ist das Makro eigentlich drin?
  12. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    BINGO !

    Das wars. Klappt tadellos. Danke.

    Ciao Stefan
  13. Zvoni

    Zvoni Erfahrenes Mitglied

    Was wars denn jetzt?

    Und falls erledigt, bitte Beitrag auch als erledigt markieren.
  14. Yaslaw

    Yaslaw n/a Moderator

    Das war es. Ist im Nachhinein auch logisch.

    Hab das mit dem erledigt mal übernommen
  15. Leola13

    Leola13 Erfahrenes Mitglied

    Hai,

    Yaslaw hat Recht.

    @Zvoni : Dein Beitrag kam während ich getippt habe.

    Ciao Stefan

    PS : Beitrag erledigt. Da ich zur Zeit keinen Internetanschluß habe, kann ich nur sporadisch (heimlich) auf der Arbeit ins Web.

Diese Seite empfehlen