如何访问放在VBA模块表单上的文本框?

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

我如何引用TextBox控件?

我已经命名了TextBox'tbSQL',在模块中我可以看到Application并且可以从模块中引用表单,表单被称为'Database Info'。

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

我试过了:

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行错误而言。 报告的错误是“types不匹配”

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

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

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

文本框作为形状,或标签为表单控件或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 

你需要使用:

 Sheets("Sheetname").Shapes("tbSQL").TextFrame.Characters.Text = "Anything you want" 

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

如果您使用Worksheettypesvariables,则Excel无法在VBA中发现该Worksheet的控件。 所以,如果你声明你的工作表保持variables为对象/变体,代码将正常工作。

其他的select是直接使用工作表的CodeName ,所以如果你在VBA IDE的属性网格中设置Worksheet的名字为wksDBSheet ,并在你的代码中使用它,它会发现TextBox

 Sub test() Dim objDBsheet As Object 'As Worksheet // Making the 0bjDBSheet type as Object or Variant '// Allows the discovery of the TextBox on the sheet. '// Most Likely its a bug. Dim objSQL As Range Dim tbSQL As MSForms.TextBox Set objDBsheet = Application.Worksheets("Database Info.") Set tbSQL = objDBsheet.tbSQL tbSQL.Text = "Bug" '/ Other Alternative is to directly use the CddeName of the sheet. Set tbSQL = wksDBsheet.tbSQL tbSQL.Text = "Code Name used" End Sub 

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