Excel VBA: Bezug auf aktuelle Zelle in Schleife?

venom4u

Grünschnabel
Hallo Leute, ich versuche gerade mich in Excel VBA etwas einzuarbeiten und bin über folgendes Problem gestolpert. Ich möchte ein kleines Makro schreiben, dass mir in jeder Zelle, die ich vorher makiert habe, einen gewissen String einfügt. Hier erstmal das Makro soweit:
Code:
Sub insert_plus()
    Dim wert As String
    Dim wert_temp As String
    Dim ins As String
    Dim einfuegen_start As Long
    
    
    ins = Application.InputBox(prompt:="Textzeichen zum Einfügen:", Type:=2)
    einfuegen_start = Application.InputBox(prompt:="Textzeichen zum Start:", Type:=1)
    
    For Each c In Range(ActiveWindow.RangeSelection.Address)
        wert_temp = c.Value
        wert = Mid(wert_temp, 1, einfuegen_start) & ins & Mid(wert_temp, einfuegen_start + 1)
        MsgBox (wert)
    Next c
     
End Sub

Anstelle der "MsgBox" möchte ich aber den modifizierten String in das akutelle Feld (quasi die Quelle von "c") zurückschreiben. In Java wäre das ja sowas wie "this". Kann mir bitte jemand einen Tipp geben?

Tausend Dank

Christian.
 
Nein so ging es leider nicht. c oder auch c.value liefert immer den Inhalt der Zelle, nicht aber die Adresse (weder in "Range"-form noch in "Cells"-form). Deshalb habe ich es nach langem Durchstöbern von ca. 1000 Foren und etlichem Kombinieren anders gelöst. Ob es elegant ist weiß ich nicht, aber da ich noch ein totaler Anfänger bin, zählt ja nur das Ergebnis :)

Hier der Code, falls es interessiert:

Code:
Public Sub string_einfuegen()
    Dim ins As String
    Dim einfuegen_start As Long
    Dim str_start As String
    Dim int_start_zeile As Integer
    Dim int_start_spalte As Integer
    Dim int_ende_zeile As Integer
    Dim int_ende_spalte As Integer
    Dim x, y As Integer
    Dim wert_temp As String
    Dim arr_a As Variant
    
    
    'Einlesen der Werte
    
    ins = Application.InputBox(prompt:="Textzeichen zum Einfügen:", Type:=2)
    einfuegen_start = Application.InputBox(prompt:="Postion, HINTER dem der String eingefügt werden soll:", Type:=1)
    
    str_start = ActiveWindow.RangeSelection.Address '(rowabsolute:=False, columnabsolute:=False)
    MsgBox (ActiveWindow.RangeSelection.Address)
    
    'Start Zelle
    If InStr(str_start, ":") > 0 Then
        int_start_zeile = Range(Left(str_start, InStr(str_start, ":") - 1)).Row
        int_start_spalte = Range(Left(str_start, InStr(str_start, ":") - 1)).Column
    
        'End Zelle
        int_ende_zeile = Range(Right(str_start, InStr(str_start, ":") - 1)).Row
        int_ende_spalte = Range(Right(str_start, InStr(str_start, ":") - 1)).Column
    Else
        int_start_zeile = Range(str_start).Row
        int_ende_zeile = int_start_zeile
        
        int_start_spalte = Range(str_start).Column
        int_ende_spalte = int_start_spalte
    End If
           
        
    For y = int_start_zeile To int_ende_zeile
        For x = int_start_spalte To int_ende_spalte
            wert_temp = Cells(y, x).Value 'Alter Wert der Zelle wird übergeben
            Cells(y, x).Value = Mid(wert_temp, 1, einfuegen_start) & ins & Mid(wert_temp, einfuegen_start + 1) 'Wert wird verändert und zurückgeschrieben
        Next x
    Next y

End Sub

Nun würde mich aber auch noch eins interessieren. Ich habe das Ding als AddIn gespeichert und im AddIn Manager aktiviert. Leider kann ich es nur aus der VBA Umgebung (Alt + F11) starten, nicht aber auf einen Button legen. Kann mir da jemand weiterhelfen? Es gibt nen Haufen Fragen im Netz dazu, aber keine gute Antwort.... :confused:

Besten Dank, Christian.
 
Hallo Christian,

versuch mal folgende Funktion: (natürlich musst Du noch Deine Bezeichner eintragen...)
Gruß
Phil


Public Function PrepareExcel(NurLeisteLoeschen As Boolean)
On Error GoTo err_
Dim i As Integer
Dim MyCommandBar As Office.CommandBar
Dim MyButton As Office.CommandBarButton
Dim MyListFeld As Office.CommandBarComboBox
Dim MyPopup As Office.CommandBarPopup
'Leiste Löschen
For i = 1 To Application.CommandBars.Count
If Application.CommandBars(i).Name = "myFunctionBar" Then
Application.CommandBars(i).Delete
Exit For
End If
Next i

If NurLeisteLoeschen = True Then
GoTo exit_
End If

Set MyCommandBar = Application.CommandBars.Add("myFunctionBar", msoBarTop, , True)

'LokationsListe
'1:
Set MyButton = MyCommandBar.Controls.Add(msoControlButton, , , 1, True)
MyButton.Caption = "my_Bezeichnung"
MyButton.Style = msoButtonCaption
MyButton.OnAction = "mySub_or_Function"

' ... und weitere bei Bedarf


Exit Function

exit_:

Exit Function
err_:

End Function
 
Zurück