Supportnet / Forum / Tabellenkalkulation
Textbox mit VBA erstellen, Text u. a. Eigenschaften einstellen
Frage
Hallo und guten Abend,
ich habe einige Texte in Zellen D1:D85. Die wollte ich per VBA in Textfelder = Textboxen kopieren und danach die Zellen löschen. Bis jetzt schaffe ich nur, die Textboxen zu erstellen, aber mit den Eigenschaften komme ich überhaupt nicht klar. Im Eigenschaftenfenster per Hand kann ich das, aber was so geht, funktioniert in VBA gar nicht. Die Eigenschaften scheinen überhaupt nicht zu existieren, ich kriege dauernd schwere Fehler und Abbrüche. Bis jetzt habe ich folgendes:
Sub TxBoxen()
Rem Textfeld / Textbox
Dim i As Integer
Dim s As Single, t As Single, l As Single, h As Single, w As Single
Dim sh As Shape
t = -51
l = 60
h = 38.25
w = 120
s = 12.75
ActiveWorkbook.Sheets("Tabelle15").Select
Rem MsgBox ActiveSheet.Shapes.Count, , ActiveSheet.Name
For i = 1 To 85
Worksheets(15).OLEObjects.Add ClassType:="Forms.TextBox.1", Left:=l, _
Top:=(t + i * (h + s)), Width:=w, Height:=h
REM , Text:=ActiveWorkbook.Sheets("Tabelle15").Range("D" & CStr(i))
REM , Value:=ActiveWorkbook.Sheets("Tabelle15").Range("D" & CStr(i))
REM , ScrollBars:=fmScrollBarsVertical
REM , LinkedCell:="$D$" & CStr(i)
REM , Name:="TxBox10" & CStr(i)
MsgBox ActiveSheet.Shapes.Count, , "i = " & CStr(i)
Next i
REM ActiveSheet.Shapes("TextBox1").Select
REM With Selection
REM .Text = "Hallihallo"
REM End With
i = 0
For Each sh In ActiveSheet.Shapes
MsgBox sh.Name & " + " & sh.ID & " + " & sh.Top, , "Name, ID, Top ="
i = i + 1
REM sh.Delete
Next
End Sub
Alles was ge-REM-t ist (außer 3.-letzte Zeile REM sh.Delete und MsgBox) funktioniert bei mir nicht. Wahrscheinlich mache ich was falsch, aber die VBA-Hilfe hilft da leider überhaupt nicht. Keine Beispiele, nur Fachchinesich. Woher soll ich wissen, ob das was mit OLE oder mit ActiveX zu tun hat, das wird nirgendwo erklärt.
Könnt Ihr mir bitte so weit helfen, dass ich in die Textfelder/-boxen wenigstens die Texte reinkriege und die Scrollbalken angezeigt bekomme. Das müsste eigentlich mit ScrollBars:=fmScrollBarsBoth gehen, geht aber auch nicht.
Vielen Dank für jeden guten Tipp!
Jana
Antwort 1 von Ahnan
Hallo,
so:
..........
For i = 1 To 85
Worksheets("Tabelle15").OLEObjects.Add ClassType:="Forms.TextBox.1", Left:=l, _
Top:=(t + i * (h + s)), Width:=w, Height:=h
With Sheets("Tabelle15").OLEObjects("TextBox" & i)
.LinkedCell = "Tabelle15!D" & i
.Object.Value = Sheets("Tabelle15").Range("D" & CStr(i))
.Object.ScrollBars = 2
.Object.MultiLine = True
End With
MsgBox ActiveSheet.Shapes.Count, , "i = " & CStr(i)
Next i
.........
Grüsse
so:
..........
For i = 1 To 85
Worksheets("Tabelle15").OLEObjects.Add ClassType:="Forms.TextBox.1", Left:=l, _
Top:=(t + i * (h + s)), Width:=w, Height:=h
With Sheets("Tabelle15").OLEObjects("TextBox" & i)
.LinkedCell = "Tabelle15!D" & i
.Object.Value = Sheets("Tabelle15").Range("D" & CStr(i))
.Object.ScrollBars = 2
.Object.MultiLine = True
End With
MsgBox ActiveSheet.Shapes.Count, , "i = " & CStr(i)
Next i
.........
Grüsse
Antwort 2 von Jana_
Hallo Ahnan!
Großartig! Fantastisch! Spitze! Ich danke Dir, denn ohne fremde Hilfe wäre ich wahrscheinlich nie auf die richtige Lösung gekommen.
Ich bin erst heute wieder dazu gekommen, aber so fing der Tag richtig gut an. Nochmal Danke!
Jana
Großartig! Fantastisch! Spitze! Ich danke Dir, denn ohne fremde Hilfe wäre ich wahrscheinlich nie auf die richtige Lösung gekommen.
Ich bin erst heute wieder dazu gekommen, aber so fing der Tag richtig gut an. Nochmal Danke!
Jana
Antwort 3 von Jana_
Hallo VBA-Spezies,
ich habe ein neues Problem, so ähnlich wie das alte. Deshalb versuche ich es gleich in diesem Thread noch mal. Ich will per VBA ein paar Schaltflächen und noch ein paar andere Steuerlemente in einer Tabelle erstellen und dazu eine Schleife benutzen.
Das Erstellen klappt, aber den Dingern während der Erstellung oder anschließend ein paar Eigenschaften zu geben, das endet jedesmal mit Fehlermeldung und Abbruch:
Laufzeitfehler ´438´: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Dazu noch folgende Informationen. Es gibt ja zwei verschiedene Arten von Steuer-elementen, Toolbox-Steuerelemente und Formular-Steuerelemente. Ich brauche unbedingt Toolbox-Steuerelemente, weil die zum Teil andere und mehr Eigenschaften (z. B Farbe der Schaltfläche) haben. Das Problem ist nur, dass ich nicht weiß, wie ich darauf zugreifen kann.
Und das erstaunlichste ist, dass der Makrorecorder so tut, als würde er alles aufzeichnen, aber am Ende steht da einfach nur ActiveSheet.Shapes("CommandButton1").Select und sonst nichts! Ist das normal?
Hier ist erstmal mein Code einschließlich meiner Fehlversuche (leicht gekürzt):
Ich würde mich freuen, wenn Ihr mir noch mal helfen könntet.
Jana
ich habe ein neues Problem, so ähnlich wie das alte. Deshalb versuche ich es gleich in diesem Thread noch mal. Ich will per VBA ein paar Schaltflächen und noch ein paar andere Steuerlemente in einer Tabelle erstellen und dazu eine Schleife benutzen.
Das Erstellen klappt, aber den Dingern während der Erstellung oder anschließend ein paar Eigenschaften zu geben, das endet jedesmal mit Fehlermeldung und Abbruch:
Laufzeitfehler ´438´: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Dazu noch folgende Informationen. Es gibt ja zwei verschiedene Arten von Steuer-elementen, Toolbox-Steuerelemente und Formular-Steuerelemente. Ich brauche unbedingt Toolbox-Steuerelemente, weil die zum Teil andere und mehr Eigenschaften (z. B Farbe der Schaltfläche) haben. Das Problem ist nur, dass ich nicht weiß, wie ich darauf zugreifen kann.
Und das erstaunlichste ist, dass der Makrorecorder so tut, als würde er alles aufzeichnen, aber am Ende steht da einfach nur ActiveSheet.Shapes("CommandButton1").Select und sonst nichts! Ist das normal?
Hier ist erstmal mein Code einschließlich meiner Fehlversuche (leicht gekürzt):
Sub CB_in_T13()
´
Dim i As Byte, lc(35) As String
Dim l1 As Integer, l2 As Integer, t1 As Single
Sheets("Tabelle13").Select
lc(1) = "GS"
lc(2) = "GT"
Rem lc(3) = "VR", lc(4) = "VS", usw.
l1 = -120
l2 = 180
t1 = 12.75
For i = 1 To 2
Rem Das funktioniert: Erstellen und Eigenschaft .Name anzeigen
Rem ----------------------------------------------------------
ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=l1 + i * l2, Top:=t1, Width:=120, Height:=25.5
With ActiveSheet.OLEObjects("CommandButton" & CStr(i))
MsgBox .Name, , "MB1"
End With
MsgBox ActiveSheet.OLEObjects("CommandButton" & CStr(i)).Name, , "MB2"
Rem Und das funktioniert alles nicht:
Rem ---------------------------------
´With ActiveSheet.OLEObjects("CommandButton" & CStr(i))
´MsgBox .Caption, , "MB3"
´.Caption = "Diagramm " & lc(i) & " erstellen"
´.Font.Size = 8
´.Font.Bold = True
´End With
Rem auch nicht mit .Shapes statt .OLEObjects:
Rem -----------------------------------------
´ActiveSheet.Shapes("CommandButton" & CStr(i)).Select
´With Selection
´MsgBox .Caption, , "MB4"
´.Caption = "Diagramm " & lc(i) & " erstellen"
´.Font.Size = 8
´.Font.Bold = True
´End With
Next i
ActiveSheet.Range("A2").Select
End SubIch würde mich freuen, wenn Ihr mir noch mal helfen könntet.
Jana
Antwort 4 von fürLau
(Viel)Leicht (unglücklich)gekürzt
Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
Private Sub CommandButton1_Click()
Dim obj
For Each obj In Me.OLEObjects
Debug.Print Me.Name; obj.Name
Next
End Sub
Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
Antwort 5 von Jana_
Hallo fürLau,
bezieht sich Dein "(Viel)Leicht (unglücklich)gekürzt " auf Deinen eigenen Text oder auf meinen Code? Bei mir läuft die Schleife natürlich nicht nur von 1 bis 2, deswegen muss ich zwischenduch auch mit den Positionen (Top, Left) ein bisschen rechnen. Aber das kann man jetzt erstmal weglassen, nur deshalb habe ich gekürzt.
Ansonsten haben wir da wohl leider ein Missverständnis ist. Ich wollte nicht die Namen der Schaltflächen ermitteln, das klappt bisher auch schon ganz gut, sondern den Schaltflächen per Makro weitere Eigenschaften geben, wie z. B. Caption (Beschriftung), Font.Size (Schriftgröße) usw. Ich denke, mit dem Code für das Click-Ereignis komme ich klar, da geht es auch um ganz andere Sachen, die man damit machen soll (Diagramme erstellen usw.)
Also, wann und wie gebe ich den Dingern eine ordentliche Beschriftung?
Wenn man das mit einem weiteren Parameter nach dem Erstellen (ActiveSheet.OLEObjects.Add ... Left:=..., Top:=..., Width:=..., Height:=..., ??? ) machen kann oder muss wäre es mir auch recht.
Schöne Grüße,
Jana
bezieht sich Dein "(Viel)Leicht (unglücklich)gekürzt " auf Deinen eigenen Text oder auf meinen Code? Bei mir läuft die Schleife natürlich nicht nur von 1 bis 2, deswegen muss ich zwischenduch auch mit den Positionen (Top, Left) ein bisschen rechnen. Aber das kann man jetzt erstmal weglassen, nur deshalb habe ich gekürzt.
Ansonsten haben wir da wohl leider ein Missverständnis ist. Ich wollte nicht die Namen der Schaltflächen ermitteln, das klappt bisher auch schon ganz gut, sondern den Schaltflächen per Makro weitere Eigenschaften geben, wie z. B. Caption (Beschriftung), Font.Size (Schriftgröße) usw. Ich denke, mit dem Code für das Click-Ereignis komme ich klar, da geht es auch um ganz andere Sachen, die man damit machen soll (Diagramme erstellen usw.)
Also, wann und wie gebe ich den Dingern eine ordentliche Beschriftung?
Wenn man das mit einem weiteren Parameter nach dem Erstellen (ActiveSheet.OLEObjects.Add ... Left:=..., Top:=..., Width:=..., Height:=..., ??? ) machen kann oder muss wäre es mir auch recht.
Schöne Grüße,
Jana
Antwort 6 von fürLau
Hallo
versuch´s ´mal so:
Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
versuch´s ´mal so:
Dim i%: i = 1
With ActiveSheet.OLEObjects("CommandButton" + CStr(i)).Object
.Caption = "test" + CStr(i)
.TakeFocusOnClick = False
.Font.Size = 14
.BackColor = RGB(128, 64, 128)
.ForeColor = RGB(255, 64, 64)
End WithGruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
Antwort 7 von Jana_
Hallo fürLau,
ich danke Dir ganz herzlich, es funktioniert. Die Lösung war, ein .Object hin dranzuhängen. Da bin ich bei all meinen Versuchen nicht drauf gekommen.
Frohe Pfingsten!
Jana
ich danke Dir ganz herzlich, es funktioniert. Die Lösung war, ein .Object hin dranzuhängen. Da bin ich bei all meinen Versuchen nicht drauf gekommen.
Frohe Pfingsten!
Jana

