|
Guten Abend Diana,
Keine Ahnung ob du hier nochmal reinschaust. Aber man kann natürlich auch mit Kanonen auf Spatzen schießen. Sprich, sich den VBA-Editor entsprechend umgestalten. Ich habe dir vor einem halben Jahr gezeigt, wie du Buttons in einer Symbolleiste anlegen kannst. Das kannst du natürlich auch mit einer Eingabebox und einem Button tun.
In ein allgemeines Modul:
Dim cbbtnColl As New Collection
Sub ButtonAnlegen()
'nur einmalig ausführen!
With VBE.CommandBars("Voreinstellung").Controls.Add(msoControlComboBox)
.Caption = "Tabstops"
.Text = "8,30,64"
End With
Set cbbtn = VBE.CommandBars("Voreinstellung").Controls.Add(msoControlButton)
With cbbtn
.FaceId = 7
.Caption = "FormatTabs"
.TooltipText = "Formatiert den markierten Code im aktuellen Fenster gemäß den in der Editbox links angegebenen TabStops"
End With
End Sub
Sub ButtonEventsAnlegen()
'sollte über Document_Open gestartet werden.
Dim cbbtnevt As clsCommandBarButton, i As Long
For i = 1 To 1
cbbtnColl.Add New clsCommandBarButton
Set cbbtnevt = cbbtnColl(cbbtnColl.Count)
Set cbbtnevt.CommandBarButton = VBE.CommandBars("Voreinstellung").Controls("FormatTabs")
Next i
End Sub
Public Sub FormatTextByTabstops()
Dim zeile As Long, spalte As Long, zeile2 As Long, spalte2 As Long
VBE.ActiveCodePane.GetSelection zeile, spalte, zeile2, spalte2
Text = VBE.ActiveCodePane.CodeModule.Lines(zeile, zeile2 - zeile + 1)
arr = Split(Text, Chr(10))
tbsarr = Split(VBE.CommandBars("Voreinstellung").Controls("Tabstops").Text, ",")
For a = LBound(arr) To UBound(arr)
arr2 = Split(arr(a), ": ")
l = 0: x = 0
For i = LBound(arr2) To UBound(arr2)
arr2(i) = Trim(arr2(i))
If x <= UBound(tbsarr) Then arr2(i) = String(CLng(tbsarr(x)) - l - 1, " ") & arr2(i)
l = l + Len(arr2(i)) + 2
If x < UBound(tbsarr) Then
Do While l + 2 > CLng(tbsarr(x))
x = x + 1
Loop
Else
x = x + 1
End If
Next i
arr(a) = Join(arr2, ": ")
'MsgBox c
Next a
Text = Join(arr, Chr(10))
VBE.ActiveCodePane.CodeModule.DeleteLines zeile, zeile2 - zeile + 1
VBE.ActiveCodePane.CodeModule.InsertLines zeile, Text
Application.OnTime Now, "NochAktiv"
End Sub
Sub NochAktiv()
If cbbtnColl.Count = 0 Then ButtonEventsAnlegen
End Sub
In ein Klassenmodul mit dem Namen: clsCommandBarButton
Private WithEvents m_CommandBarButton As CommandBarButton
Public Property Set CommandBarButton(cbb As CommandBarButton)
Set m_CommandBarButton = cbb
End Property
Public Property Get CommandBarButton() As CommandBarButton
Set CommandBarButton = m_CommandBarButton
End Property
Private Sub m_CommandBarButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Select Case Ctrl.Caption
Case "FormatTabs"
FormatTextByTabstops
End Select
End Sub
Führe einmalig die Sub ButtonAnlegen mit F5 aus. Du erhältst in der Symbolleiste eine Combobox (eine reine Textbox war bei mir leider nicht möglich) und einen Button. Schließe Word und öffne es wieder, oder führe alternativ einmalig die Sub ButtonEventsAnlegen mit F5 aus.
Füge nun deinen aus dem Notepad kopierten Code in ein weiteres allgemeines Modul eines beliebigen Documents ein. Markiere die zu formatierenden Zeilen und drücke auf den Button. Es werden, gemäß der in der Combobox festgelegten Tabstops, entsprechend viele Leerzeichen eingefügt. Mit deinem Beispieltext aus der Eröffnungsfrage dieses Threads klappt das prima.
Gruß Mr. K.
|