VBA Textbox ansprechen / Wert eintragen
#1
Hallo zusammen,

da ich mir zwischenzeitlich die Finger wundgetippt habe versuche ich nun mal im Forum.
Ich suche nach einer Lösung um Werte in beliebig vielen ActiveX - Textboxen (also direkt im Excel-Sheet) anzusprechen und diesen bspw. Werte zuzuweisen bzw. zu leeren. Es befinden sich auch noch andere Objekte im Tabellenblatt, deren Werte in diesen Zuge aber nicht verändert werden dürfen (ist glaube ich selbstredend).

Alle Ansätze die ich bislang gefunden bzw. ausprobiert habe waren erfolglos.
Bspw. die Anpassung für einen Checkbox-Code auf Textbox.

Public Sub Main_tb()
    Dim shpShape As Shape
    For Each shpShape In ActiveSheet.Shapes
        With shpShape
            If TypeOf .OLEFormat.Object Is OLEObject Then
                If TypeOf .OLEFormat.Object.Object Is MSForms.TextBox Then
                    .Text = "1"
                End If
            End If
        End With
    Next shpShape
End Sub


Falls mir da jemand helfen kann wäre ich echt dankbar.
Bitte noch einen Hinweis wo das Script eingesetzt werden kann / muss (Objekt/Tabellenblatt oder Modul).

Vielen Dank und freundliche Grüße
Harald
Antworten Top
#2
Moin Harald!

Zitat:Ich suche nach einer Lösung um Werte in beliebig vielen ActiveX - Textboxen (also direkt im Excel-Sheet) anzusprechen


Mir fällt da eine prima Lösung ein:
Ein Tabellenblatt hat 2^20*2^14 = 2^34 =  17.179.869.184 Textboxes aka Zellen zur Verfügung.
Die lassen sich zudem noch prima formatieren.
Sollten sie im Blatt fragmentiert vorliegen, kann man ihnen sogar einen Namen geben und somit die Gesamtheit ansprechen.
Ansonsten könnte es sogar sinnvoller sein, eine Vorlage (.xltx) zu erstellen, in der die "Textboxes" (besser natürlich die entsprechenden Zellen) mit 1 gefüllt sind.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hallo,

tut mir leid, ich verstehe die Antwort nicht.
Es geht mir um ein ActiveX-Steuerelement namens "Textfeld", dass im Excel-VBA wiederum als "Textbox" benannt ist.

Eine beliebige Anzahl bezieht sich darauf, dass ich diese nicht einzeln - dass mache ich aktuell noch - sondern als Schleife oder über "for each"  ansprechen möchte.
Leider fehlt mir dafür die korrekte Syntax.

Dies sind derzeit max. 10, können bei einer komplexen Tabelle aber halt auch einige mehr werden.

Viele Grüße
Harald
Antworten Top
#4
Hallo,

im Achiv habe ich das gefunden:

Code:
For Each shp In sh.Shapes
      If UCase(shp.OLEFormat.progID) = UCase("Forms.CommandButton.1") Then
        shp.Delete
      End If
    Next

Ein paar Anpassungen sind nötig.

mfg
Antworten Top
#5
Hallo Harald,

der Code kommt in ein allgemeines Modul:
Code:
Sub abc()
  Dim oObj As OLEObject
  For Each oObj In Worksheets("Tabelle2").OLEObjects
    If oObj.progID = "Forms.TextBox.1" Then
      With oObj.Object
        If Len(.Text) Then
          .Text = ""
        Else
          .Text = "Hallöchen"
        End If
      End With
    End If
  Next oObj
End Sub

Gruß Uwe
Antworten Top
#6
Hallo Uwe,

ich weiß garnicht wie ich dir für deinen nächtlichen Einsatz danken soll.
Es funktioniert genau so wie ich es benötige. Einfach super.

Also, vielen Dank.

Viele Grüße
Harald
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste