Excel VBA 运行时错误424:试图复制文本框时需要对象。

5

我试图将一个文本框的内容从一个工作簿复制到另一个工作簿。我可以轻松地将第一个工作簿中的单元格值复制到第二个工作簿,但是当我尝试复制文本框时,会出现“需要对象”错误。这个宏是从包含要复制的数据的工作簿运行的。使用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

感谢任何帮助。


你试过使用完整的Application.ActiveWorkbook.ActiveSheet.TextBox1了吗?你能检查一下ActiveWorkbook/ActiveSheet是否不是xlw吗?如果是这种情况,你只需要在打开另一个文档之前为你的活动文档设置一个对象即可。 - dan
但是你有检查ActiveWorkbook/ActiveSheet所指的是什么吗?似乎它指的是xlw (c:\myworkbook.xlsx),而不是包含TextBox1的文档。 - dan
测试也可以使用较短的选项 ...= Activesheet.TextBox1.Text。在使用用户控件之前,将工作表对象放在前面非常重要。但是,如果它不起作用,您可以截取文本框的屏幕截图,并在此处添加该图片的链接吗? - Kazimierz Jawor
Activesheet.TextBox1.Text 给出了相同的错误。 看起来 activesheet 无论如何都是指向目标工作簿。 - Sam WB
这意味着您需要将引用对象添加到正确的工作簿中。请参见我的答案。 - dan
显示剩余2条评论
3个回答

5
你的宏的问题在于,一旦你打开了目标工作簿(代码示例中的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将您的主要工作簿设为活动状态。如果您使用工作表对象进行操作,它也是有效的。选择哪个方法主要取决于您想要做什么(是否有多个工作表等)。

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

编辑

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


有没有想法如何将textbox1限定在活动工作表中?我不认为可以使用ActiveSheet.TextBox1。 - Sam WB
这应该作为评论发布,而不是答案。 - dan
@dnLL 为什么?这是一个答案,不是评论或问题。虽然不如你的回答详细,但它是一个答案(根据定义)。 - Seth Moore
我猜你是指第八个定义。我仍然认为以“我认为”和“你可能是”的两个句子开头并不是一个答案。 - dan

0

问题出在这一行

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

你在其他位置定义了文本框,但是在这里没有使用。Excel无法在当前工作表中找到文本框对象,而该文本框是在xlw中定义的。

因此,请将其替换为

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接