如何访问VBA模块中放置在工作表上的textBox?

时间:2016-07-14 18:41:25

标签: excel vba textbox

我已经在Excel中的工作表上放置了一个TextBox控件,在VBA模块中我想要访问TextBox并填充内容。

如何引用TextBox控件?

我已经在模块中命名了TextBox' tbSQL',在我可以看到应用程序的模块中,可以从模块中引用工作表,工作表被称为数据库信息。&#39 ;

我想从VBA模块将数据写入TextBox,但到目前为止我还没有能够引用它。

我试过了:

    Public Const DATABASE_INFO As String = "Database Info."

    Dim objDBsheet As Worksheet, objSQL As Range
    Dim tbSQL As TextBox
    Set objDBsheet = Application.Sheets(DATABASE_INFO)
    Set tbSQL = objDBsheet.Shapes("tbSQL")

但这就是我在Set tbSQL行上得到它的错误。报告的错误是"类型不匹配"

我知道控件是一个TextBox,它是从Controlbox工具栏创建的。在Excel中查看范围栏时,它会显示:

    "=EMBED("Forms.TextBox.1","")"

在TextBox控件的属性框中,我已将(Name)属性设置为tbSQL,但它在fx文本框中保持不变。它确实在范围框中显示为tbSQL。

5 个答案:

答案 0 :(得分:2)

很可能是Excel中的一个错误。它与Excel-2003无关。

如果使用Worksheet类型变量,则Excel无法在VBA中发现该工作表上的控件。因此,如果您将工作表保存变量声明为Object / Variant,则代码将正常工作。

其他替代方法是直接使用Worksheet的CodeName,因此如果您在VBA IDE的属性网格中将Worksheet的名称设置为wksDBSheet并在代码中使用它,它将发现{{1 }}

TextBox

答案 1 :(得分:2)

文本框作为形状,或标签作为表单控件或ActiveX控件:

Sub f()
Dim tb As Shape, lblControl As Object, lblActiveX As Object
Set tb = Sheet1.Shapes("TextBox 1")
Set lblControl = Sheet1.Shapes("Label 2").OLEFormat.Object
Set lblActiveX = Sheet1.Shapes("Label1").OLEFormat.Object

lblControl.Text = "Form Control"
lblActiveX.Object.Caption = "ActiveX Control"
tb.TextFrame.Characters.Text = "Text Box"

End Sub

答案 2 :(得分:1)

您需要使用:

package Petrocabimas_App;

答案 3 :(得分:1)

最后看起来它是Excel 2003中的一个错误,我能够通过使用Sheet1.tbSQL而不是通过Application.Sheets来引用控件。

答案 4 :(得分:0)

如果您将 ActiveX texbox 放在名为“MyTextBox”的工作表上,那么您可以在 vba 中像这样set it's text

ActiveSheet.MyTextBox.Text = "hi"