2016-08-09 40 views
1

Ich habe versucht, ein Makro zu schreiben, das ein Textfeld auf einem neuen Blatt dynamisch füllt den Wert einer Zelle aus einem anderen Blatt.Kopieren Zelle Wert in Textfeld VBA

Ich habe es geschafft, um es arbeiten mit diesem:

Sub copyDetail() 

' Define variables 

Dim pre As Worksheet 
Dim des As Worksheet 

Set pre = Sheets("Presentation") 
Set des = Sheets("Description") 

Dim i As Integer 
Dim lbl As String 

' Scroll through labels and copy where boolean = 1 

For i = 2 To 17 
    If des.Cells(i, 2) = 1 Then 
     lbl = des.Cells(i, 11) 
     Sheets("Presentation").Select 
     ActiveSheet.Shapes.Range(Array("TextBox 1")).Select 
     Selection.Text = lbl 

    Else 

    End If 
Next i 

End Sub 

ich grundsätzlich in der Lage sein wollen, genau das zu tun, was dies tut, aber ohne die ganze Zeit wählen zu verwenden, da diese Blätter ändert und verlangsamt meinen Code (Ich habe viele andere Subs neben diesem). Ich habe Dinge versucht, wie die Textbox definiert, mit diesem:

Dim myLabel As Object 
Set myLabel = pre.Shapes.Range(Array("TextBox 1")) 

Aber dann bekomme ich eine Fehlermeldung „Objekt diese Eigenschaft oder diese Methode nicht unterstützt“, wenn ich versuche, und rufen:

myLabel.Text = lbl 

Antwort

1

Sie einstellen kann den Text einer TextBox etwa so:

ActiveSheet.Shapes("TextBox 1").TextFrame.Characters.Text = "Hello world" 

können Sie set-up ein wenig Helfer Sub in einem Module, um den Code wiederverwendbar zu machen:

Public Sub SetTextBoxText(ws As Worksheet, strShapeName As String, strText As String) 

    Dim shp As Shape 

    On Error Resume Next 
    Set shp = ws.Shapes(strShapeName) 

    If Not shp Is Nothing Then 
     shp.TextFrame.Characters.Text = strText 
    Else 
     Debug.Print "Shape not found" 
    End If 

End Sub