Excel->Makros->Visual Basic->Frage!

Dieses Thema im Forum "Office Software" wurde erstellt von misterbecks, 22.10.2005.

  1. misterbecks

    misterbecks Thread Starter MacUser Mitglied

    Beiträge:
    2.159
    Zustimmungen:
    16
    Registriert seit:
    06.11.2004
    Ich versuche gerade, ein Makro für Excel zu schreiben, damit ich eine nervige Anwendung nicht dauernd 100-fach ausführen muss. Es geht darum, aus csv's von bestimmten Stellen (das definieren dieser Stellen hat wunderbar geklappt) Teile zu kopieren und zu einer großen Tabelle zu verbinden.

    Nun scheitert es noch an einer Stelle: Der Schleife. Ich habe noch düster in Erinnerung, dass man eine for...next Schleife programmieren kann.

    z.B.

    Code:
    for i = x to y
    ...
    next
    Aber kann ich denn nun auch die Variable während der Schleife benutzen?

    z.B.

    Code:
    for i 0 x to y
    ...i.csv
    next
    Oder geht es am Ende viel einfacher mit Apple Script?
     
  2. Quassel

    Quassel MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    14.03.2003
    Das geht

    Die Schleife wird funktionieren, allerdings muss die von dir angegebene Schleife in VB mit next i abgeschlossen werden. Da x und y Zahlen sind, wird i logischerweise auch eine Zahl sein und kann als solche im Ausdruck verwendet werden. Wenn die CSV-Dateinamen durchnummeriert sind, gibt es so keine Probleme (sonst bieten sich Listen an). Wenn die CSVs vom Script erst geöffnet werden müssen, auf die korrekten Pfade achten, und und und...

    So hässlich VB auch ist, für Excel ist es sinnvoller als AppleScript.
     
  3. misterbecks

    misterbecks Thread Starter MacUser Mitglied

    Beiträge:
    2.159
    Zustimmungen:
    16
    Registriert seit:
    06.11.2004
    Die Zusammenfassung der csv's muss nicht zwingend in Excel passieren. Das Endergebnis wird auch wahrscheinlich auch in anderen Programmen (R, etc.) weiterbearbeitet....

    Wenn es mit Apple Script eine grundsätzlich einfacherer Methode geben würde, wäre ich dem nicht abgeneigt...
     
  4. Quassel

    Quassel MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    14.03.2003
    Da die Selektion der Teile in VB funktioniert, kannst du eigentlich dabei bleiben. Die Abarbeitung der Schleife sollte da das geringste Problem darstellen. Noch etwas: "i.csv" wird wohl nicht funktionieren (auch nicht in AppleScript), du musst das Suffix von der Variable trennen, etwa:

    Code:
    i & ".csv"
    Darauf achten, dass zwischen i und & und " jeweils Leerzeichen sind. Solche Kleinigkeiten bringen den VB-Editor bei der Übersetzung zum Meckern.

    Eine nahezu perfekte Integration von AppleScript bietet das Programm "Tex-Edit Plus", falls du die Angelegenheit doch mit AppleScript lösen willst.

    Am Ende steht man so oder so mit einer (vermutlich als *.csv exportierten) Datei da. Der Vorteil von Excel ist sicher, dass man einzelne Werte (Zellen) schnell und direkt mittels VB ansprechen kann.
     
  5. misterbecks

    misterbecks Thread Starter MacUser Mitglied

    Beiträge:
    2.159
    Zustimmungen:
    16
    Registriert seit:
    06.11.2004
    Das habe ich gemerkt. Hier kommt der Teil, der, wie Du schon sagst, Schwierigkeiten macht.
    Code:
    For i = 1 to 9
       Workbooks.Open FileName:=_
          "\\......\data\beispiel_000i.csv"
    ...
    
    Wie kann ich das i an dieser Stelle einbauen, damit er die csv's von 0001 bis 0009 automatisch abfragt? Mit &? Etwas weiter tritt das Problem in ähnlicher Form nochmal auf:
    Code:
    ...
    Range("A1:A5").Select
    ...
    
    Anstelle der 1 und der 5 sollte hier nun ein zweiter Index der Form j = (i*7)+1 laufen. Kann ich die Variable hier wie oben einfügen?
     
  6. Quassel

    Quassel MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    14.03.2003
    Auch.
    Code:
    For i = 1 to 9
       Workbooks.Open FileName:=_
          "\\......\data\beispiel_000" & i & ".csv"
    ...
    Du setzt also " & i & " an der Stelle ein. Funktioniert das mit den Backslashs auf dem Mac? Ich habe das immer ohne "FileName:=" gemacht, einfach den Pfad in Klammern eingesetzt: ("Wo:auch:immer").
    Ich habe noch eine zarte Erinnerung, dass irgendetwas bei der Mac-Version nicht implementiert wurde. Entweder Wildcards oder Variablen im Pfad/Dateinamen.

    Ja. Du kannst j (oder was auch immer) entweder vorher definieren - oder die Rechenanweisung direkt einfügen. Ersteres ist übersichtlicher. Beispiel:
    Code:
    ...
    j = (i*7) +1
    k = (i*7) + 6
    Range("A" & j & ":A" & k).Select
    ...
    Du musst auch darauf achten, dass das richtige Workbook bearbeitet wird. Das ".Select" kann man sich meist sparen und gleich den gewünschten Befehl benutzen (bspw. ".ClearContents"). Soll Inhalt aus Zelle A1 in A10 eingesetzt werden, reicht auch:

    Code:
     
    Range("A10") = Range("A1") 'Gleiches Blatt
    Range("A10") = Sheets(1).Range("A1")  'Aus anderem Blatt
    [a10] = [a1] 'Gleiches Blatt. Eckige Klammern immer für aktives Blatt
    [a10] = Workbooks("Blubb").Sheets(1).Range("A1") 'Aus anderer Mappe
    
    uswusf.


    P.S.: Um die Geschwindigkeit zu erhöhen, kann man zu Beginn des Makros einige Dinge abstellen (wenn du es nicht brauchst, im Zweifelsfall ausprobieren - aber erst mit dem funktionierenden Makro) und am Ende wieder einschalten:

    Code:
    Sub blubb()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
    
    ...
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
    End Sub
    
     
    Zuletzt bearbeitet: 23.10.2005
  7. misterbecks

    misterbecks Thread Starter MacUser Mitglied

    Beiträge:
    2.159
    Zustimmungen:
    16
    Registriert seit:
    06.11.2004
    Ehrlich gesagt keine Ahnung. Excel habe ich nur auf einer Dose in der Arbeit. Aber danke auf alle Fälle. Eine Frage habe ich noch: Wie kommt es, dass Du schon über zwei Jahre hier registriert bist und erst jetzt deine ersten Beiträge schreibst?
     
  8. Quassel

    Quassel MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    14.03.2003
    Ich gehe nicht sehr schnell aus mir heraus. ;)
     
  9. misterbecks

    misterbecks Thread Starter MacUser Mitglied

    Beiträge:
    2.159
    Zustimmungen:
    16
    Registriert seit:
    06.11.2004
    Nun funktioniert "fast" alles. Beim Schließen der ganzen csv's (wieder über eine for...next Schleife) fragt er mich, ob die Änderungen speichern möchte, da die Dateien nicht das Excel-Format haben. Nun ist das natürlich bei 30 geöffneten Dateien nervig, kann man das deaktivieren? Auch stört die Frage, ob der Speicher der Zwischenablage freigegeben werden kann....
     
  10. Quassel

    Quassel MacUser Mitglied

    Beiträge:
    5
    Zustimmungen:
    0
    Registriert seit:
    14.03.2003
    Wenn sich dieses "fast" nur noch auf die Warnmeldungen bezieht: Herzlichen Glückwunsch zum funktionierenden Makro!

    OK, jetzt ist es an der Zeit, einige Programmfunktionen auf Eis zu legen:

    Code:
    Application.EnableEvents = False
    Damit sollte Ruhe einkehren. Wie ich weiter oben schon schrieb, muss du diese Zeile zu Beginn des Makros einfügen und mit

    Code:
    Application.EnableEvents = True
    am Ende die Events wieder einschalten.

    Sollen während der Bearbeitung keine Berechnungen durchgeführt werden, kann mit

    Code:
    Application.Calculation = xlManual
    die Abarbeitungsgeschwindigkeit tüchtig (Faktor 3-4 ist allemal drin) erhöht werden (s.o.). Zur Not immer nur einschalten, wenn es wirklich nötig ist.
    Eine schöne Statusmeldung erhält man, wenn im Makro an strategischen Stellen (bspw.)

    Code:
    Application.StatusBar = "Bearbeite Datum " & x & " von " & y
    einfügt. Sie erscheint dann unten in der Fussleiste. Am Ende mit

    Code:
    Application.StatusBar = False
    ausschalten.


    P.S.: Ich habe gerade ein Scharmützel mit AppleScript und AppleWorks hinter mir... Schande über Apple! Schande, Schande, Schande! Vodoo auf hohem Niveau! Ich sage nichts mehr gegen VB in Office.
     
Die Seite wird geladen...

Diese Seite empfehlen