Makro, das sich selbst aufruft

Dieses Thema Makro, das sich selbst aufruft im Forum "Microsoft Office Suite" wurde erstellt von Gast01020304, 21. März 2006.

Thema: Makro, das sich selbst aufruft Hallo zusammen, um es vorweg zu sagen: ich weiß, dass man das eigentlich nicht macht. A_B_E_R: ich habe eine...

  1. Hallo zusammen,

    um es vorweg zu sagen: ich weiß, dass man das eigentlich nicht macht. A_B_E_R: ich habe eine Artikelliste mit 282 Seiten. Sie ist nach einem festen Schema aufgebaut:
    12345[xx] Artikel Name
    [xx] bedeutet: es sind mindestens fünf, maximal sieben Stellen der Artikelnummer (rein numerisch)
    Artikel Name bedeutet: der Name des Artikels kann sich aus mehreren Worten zusammensetzen. Deswegen scheitert auch eine Behandlung der Daten mit Excel per Import.

    Das Ganze war mal eine einzige Zeile aus einem Datenexport, die Werte waren mit Komas von einander getrennt. Über die Word-Funktion Ersetzen habe ich die Kommas durch Tab-Stops ersetzt, daher 282 Seiten!!!

    So. Ich habe nun ein Makro geschrieben, was nach fünf Ziffern sucht. Danach sucht es nach einem Lehrzeichen und ersetzt dieses durch einen Tabstop. Danach fängt das Ganze wieder von vorne an.

    Ich habe mir nun das Makro auf eine eigene Symbolschaltfläche gelegt. Klicken + Makro läuft. Bei 282 Seiten ist das ein wenig nervend.

    Dann bin ich hingegangen und habe den Aufruf für das Marko in das Marko mit aufgenommen. Da hängt sich das Makro dann mit dem Hinweis Nicht genügend Stapelspeicher auf.

    Zuletzt habe ich mir nun eine Tastenkombination für das Marko eingerichtet. Damit geht's jetzt einigermaßen.

    Kann ich aber den Stapelspeicherüberlauf programmiertechnisch irgendwie verhindern? Es kommen in der nächsten Zeit noch einige solcher Konvertierungen auf mich zu.

    Vielen Dank für Hinweise.

    Gruß,

    Stefan
     
  2. Hallo Gast01020304,

    ist das Makro für Word ?

    Sollen das Makro immer nur eine Ersetzung vornehmen oder soll es alle Kombinationen ZifferZifferZifferZifferZifferLeerzeichen in ZifferZifferZifferZifferZifferTabulatorzeichen ändern ?

    Gruß Matjes :)
     
  3. Hallo Matjes,

    ja, ein Word-Makro.

    Meines sucht und ersetzt jeweil ein Vorkommen und ruft sich dann selbst auf. Wenn man das in einer Schleife erweitern könnte, dass alle Vorkommen in einem Dokument ersetzt werden, wäre das natürlich klasse.

    Gruß,

    Stefan
     
  4. Hallo Stefan,

    dann probier mal den nachfolgenden Makro. Zum Ausprobieren erstmal eine Kopie deiner Datei verwenden ! man weiß ja nie wo der Fehlerteufel zuschlägt.

    Ich hab ihn auf einer Probedatei mit 300 Seiten ausprobiert. Auf eine 300MHz-Maschine braucht er ca. 1 Minute bei Ersetzung in jeder Zeile.
    Also etwas Geduld ...  ;D

    Gruß Matjes :)
    Code:
    Sub Word_12345LeerErsetzen12345Tab()
      
      Dim doc As Document, r As Range
      Dim l_anf As Long, l_end As Long, l_Zahl As Long
    
      Set doc = ActiveDocument
      
     ->Kompletter Text
      Set r = doc.Content
      
      l_anf = r.Start
      l_end = r.End
      
     ->Range am Anfang um 5 Zeichen kleiner machen,
     ->da bei Fund 5 Zeichen zurückgeschaut wird
      l_anf = l_anf + 5
      doc.Range(Start:=l_anf, End:=l_end).Select
      
     ->Find-Einstellungen
      With Selection.Find
        .Forward = True
        .ClearFormatting
        .MatchWholeWord = False
        .MatchCase = False
        .Wrap = wdFindStop
      End With
      
      On Error Resume Next->wegen Zahl-Test
      
     ->Bildschirm-Update abschalten
      Application.ScreenUpdating = False
      Do
        If Not Selection.Find.Execute(FindText:= ) Then GoTo AUFRAEUMEN
       ->gefunden, Anfang meken
        l_anf = Selection.Start
       ->5 Zeichen vorher selektieren
        Selection.MoveLeft Unit:=wdCharacter, Count:=6, Extend:=wdExtend
       ->in Ganzzahl umwandeln
        l_Zahl = Selection.Text
        If Err.Number <> 0 Then
         ->Fehler -> keine Ganzzahl
          Err.Clear
         ->Selektion auf Zeichen nach Fundort setzen
          Selection.Start = l_anf + 1
        Else
         ->Leerzeichen ersetzen durch Tab
          Selection.Start = l_anf
          Selection.End = l_anf + 1
          Selection.Text = vbTab
        End If
       ->Selektions-Ende auf Content-Ende setzen
        Selection.End = l_end
      Loop
      Application.ScreenUpdating = True
        
    
    AUFRAEUMEN:
     ->Objekt-Variable freigeben
      Set doc = Nothing: Set r = Nothing
    End Sub
     
  5. Hey,

    funktioniert prächtig, vielen Dank. Es dauert aber, was keine Kritik sein soll, fast genauso lange, wie wenn ich die Tastaturkombination meines Makros drücke. Aber ein toller Ansatz, um damit ähnliche Sachen dann automatisch machen zu lassen.

    Vielen Dank nochmals,

    Gruß,

    Stefan
     
Die Seite wird geladen...

Makro, das sich selbst aufruft - Ähnliche Themen

Forum Datum
Makrosicherheit und vertrauenswürdige Quellen Windows XP Forum 10. Okt. 2007
StarOffice 7-Makros löschen "sich selbst" Windows XP Forum 13. Feb. 2007
Makro Sicherheitsfrage Windows XP Forum 11. Okt. 2006
Wodurch unterscheiden sich Makros, Module und Prozeduren in Programm MS Access? Microsoft Office Suite 6. Mai 2006
Excel Makro: "sich selber löschen, wenn doppelt" Microsoft Office Suite 24. Mai 2005