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

时间:2013-04-18 13:44:40

标签: excel vba runtime

我正在尝试将文本框的内容从一个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 代码:

{{1}}

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

宏的问题在于,一旦在代码示例中打开了目标工作簿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 对象执行此操作,它也会起作用。使用一个或另一个主要取决于你想做什么(如果有多张表等)。

答案 1 :(得分:1)

我认为发生这种情况的原因可能是因为TextBox1确定了VBA模块及其相关工作表,而Range正在确定“活动工作表”。

修改

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

答案 2 :(得分:0)

问题在于这一行

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

您在此处未使用的其他位置定义了文本框。当此文本框在xlw中定义时,Excel无法在当前工作表中找到文本框对象。

因此用

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