Wie führe ich ein Makro auf mehreren Arbeitsblättern aus?


0

Ich möchte ein Makro auf mehreren Arbeitsblättern ausführen. Die Blätter heißen A, B, C ... X, Y, Z. Wenn ich zu Z komme, beginnen die Blätter mit AA, BB, CC ... XX, YY, ZZ, dann AAA, BBB, CCC ... XXX, YYY, ZZZ und dies wiederholt sich bis zu ZZZZZ. Es gibt also 130 Blätter, auf denen ich das Makro ausführen muss. Ich bin mir nicht mal sicher, wo ich damit anfangen soll.

Ich habe versucht, mir etwas auszudenken, aber ich bin neu bei VBE und habe nicht einmal einen Spielplan dafür. Die Arbeitsblattnamen befinden sich in einer Nachschlagetabelle mit dem Namen "lookupABC123". Das Makro, das im Wesentlichen ausgeführt wird, kopiert einen Bereich von "A" und bearbeitet und verschiebt dann einige Zeilen in ein Master-Blatt. Ich habe das Makro auf 7 Blatt laufen lassen, aber in Zukunft könnte es auf 130 Blatt gehen.


Willkommen bei Super User. Wir sind kein Script Writing Service. Wir erwarten von den Benutzern, dass sie uns mitteilen, was sie bisher versucht haben (einschließlich der von ihnen verwendeten Skripte) und wo sie hängengeblieben sind, damit wir bei bestimmten Problemen helfen können. Fragen, die nur nach Skripten fragen, sind zu weit gefasst und werden wahrscheinlich zurückgestellt oder geschlossen . Bitte lesen Sie Wie stelle ich eine gute Frage? .
DavidPostill

Antworten:


1

Ich glaube, die einfache Antwort ist, Ihr Makro in Ihr PERSÖNLICHES MAKRO-ARBEITSBUCH einzufügen, wenn Sie es erstellen. Auf diese Weise ist es nicht nur für die aktuelle Arbeitsmappe verfügbar, sondern auch für alle neuen Arbeitsmappen, die Sie erstellen, unabhängig davon, wie viele Arbeitsblätter sich darin befinden.


0

Wir können eine UDF () verwenden , um die Blattnamen zu generieren und die erforderlichen Blätter zu durchlaufen:

Public Function ConvertBase10(ByVal d As Double) As String
'
'  http://www.freevbcode.com/ShowCode.asp?ID=6604
'
    Dim S As String, tmp As Double, i As Integer, lastI As Integer
    Dim BaseSize As Integer
    Dim sNewBaseDigits As String
    sNewBaseDigits = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    BaseSize = Len(sNewBaseDigits)
    Do While Val(d) <> 0
        tmp = d
        i = 0
        Do While tmp >= BaseSize
            i = i + 1
            tmp = tmp / BaseSize
        Loop
        If i <> lastI - 1 And lastI <> 0 Then S = S & String(lastI - i - 1, Left(sNewBaseDigits, 1)) 'get the zero digits inside the number
        tmp = Int(tmp) 'truncate decimals
        S = S + Mid(sNewBaseDigits, tmp + 1, 1)
        d = d - tmp * (BaseSize ^ i)
        lastI = i
    Loop
    S = S & String(i, Left(sNewBaseDigits, 1)) 'get the zero digits at the end of the number
    ConvertBase10 = S
End Function


Sub MAIN()
   Dim SheetName As String

   For i = 1 To 130
      SheetName = ConvertBase10(i)
      MsgBox SheetName
      Sheets(SheetName).Activate
      '
      'process
      '
   Next i
End Sub

Übrigens, wenn Sie 1.000.000 Arbeitsblätter hätten, könnten Sie nur Folgendes erreichen:

AWUTA


Danke, Garys Schüler. Wie gehe ich in den "sNewBaseDigits" durch die Arbeitsblätter. Meine Blätter gehen von A..BCXYZ, dann AA, ZZ, dann AAA, ZZZ bis AAAAA ... ZZZZZ. vergiss nicht, ich sehe jetzt, was du tust. aber wo setze ich mein Makro ein, ist das im Haupt-Sub?
DanM

@DanM Lassen Sie mein MAIN- Makro Ihr Makro aufrufen.
Garys Schüler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.