Supportnet Computer
Planet of Tech

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

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

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):

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 Sub


Ich würde mich freuen, wenn Ihr mir noch mal helfen könntet.

Jana

Antwort 4 von fürLau

(Viel)Leicht (unglücklich)gekürzt
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

Antwort 6 von fürLau

Hallo
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 With


Gruß[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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: