Excel VBA运行时错误“424”:Object尝试复制TextBox时需要

我试图将文本框的内容从一个workbook复制到另一个workbook 。 我没有问题,从第一个workbook复制到第二个单元格值,但是当我试图复制文本框时,我得到一个object required错误。 该macro正在从包含要复制的数据的工作簿中运行。 使用Excel 2007代码:

 Sub UploadData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") xlo.Worksheets(1).Cells(2, 1) = Range("d4").Value 'Copy cell content (this works fine) xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 'This gives me the object required error xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub 

谢谢你的帮助。

您的macros的问题是,一旦您已经打开您的目标工作簿 (您的代码示例中的xlw ),它被设置为ActiveWorkbook对象,并且您将得到一个错误,因为该特定工作簿中不存在TextBox1 。 要解决此问题,您可以在打开另一个参考对象之前,为您的实际工作簿定义一个参考对象。

 Sub UploadData() Dim xlo As New Excel.Application Dim xlw As New Excel.Workbook Dim myWb as Excel.Workbook Set myWb = ActiveWorkbook Set xlw = xlo.Workbooks.Open("c:\myworkbook.xlsx") xlo.Worksheets(1).Cells(2, 1) = myWb.ActiveSheet.Range("d4").Value xlo.Worksheets(1).Cells(2, 2) = myWb.ActiveSheet.TextBox1.Text xlw.Save xlw.Close Set xlo = Nothing Set xlw = Nothing End Sub 

如果您愿意,也可以使用myWb.Activate将主工作簿恢复为活动状态。 如果您使用Worksheet对象,它也可以工作。 使用这个或另一个主要取决于你想要做什么(如果有多张表等)。

我认为发生这种情况的原因可能是因为TextBox1正在对VBA模块及其关联的工作表进行作用域,而Range则是对“活动工作表”进行作用域。

编辑

看起来您可能可以使用GetObject函数从工作簿中拉取文本框。

问题在于这一行

  xlo.Worksheets(1).Cells(2, 2) = TextBox1.Text 

您在其他位置定义的文本框不在此处。 Excel无法在当前工作表中find文本框对象,而此文本框是在xlw中定义的。

因此,用这个replace

  xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text