我已经在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。
答案 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"