Makro, das sich selbst aufruft

  • #1
G

Gast01020304

Guest
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
 
Thema:

Makro, das sich selbst aufruft

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben