2016-08-09 3 views
1

Я пытаюсь написать макрос, который будет динамически заполнять текстовое поле на новом листе, будет значением ячейки с другого листа.Копирование значения ячейки в текстовое поле vba

мне удалось получить его работу с помощью этого:

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 

Я в принципе хочу, чтобы иметь возможность делать то, что это делает, но без выбора все время, как это меняет листы и замедляет мой код (У меня есть много других sub, чтобы работать вместе с этим). Я попытался вещи, как определение текстового поля с помощью этого:

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

Но тогда я получаю «объект не поддерживает это свойство или метод» ошибка, когда я пытаюсь позвонить:

myLabel.Text = lbl 

ответ

1

You можно задать текст TextBox следующим образом:

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

Вы можете немного помощника Sub-наладочных в Module, чтобы сделать код повторного использования:

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 
Смежные вопросы