5

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

谢谢你的帮助。

4

3 回答 3

5

您的宏的问题在于,一旦您打开了目标Workbookxlw在您的代码示例中),它就会被设置为ActiveWorkbook对象,并且您会收到错误,因为TextBox1在该特定Workbook中不存在。要解决此问题,您可以在打开另一个工作簿之前为您的实际工作簿定义一个引用对象。

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对象执行此操作,它也将起作用。使用一个或另一个主要取决于您想要做什么(如果有多个工作表等)。

于 2013-04-19T14:53:44.803 回答
1

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

编辑

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

于 2013-04-18T13:50:32.620 回答
0

问题在于这条线

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

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

因此将其替换为

 xlo.Worksheets(1).Cells(2, 2) = worksheets("xlw").TextBox1.Text 
于 2017-11-13T21:27:27.067 回答