【问题标题】:Excel VBA Run-time error '424': Object Required when trying to copy TextBoxExcel VBA 运行时错误“424”:尝试复制文本框时需要对象
【发布时间】:2013-04-11 16:05:06
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 您尝试使用完整的 Application.ActiveWorkbook.ActiveSheet.TextBox1?你能检查一下 ActiveWorkbook/ActiveSheet 是否不是 xlw 吗?如果是这种情况,您只需在打开另一个文档之前为您的活动文档设置一个对象。
  • 试试这个 ...= activesheet.TextBox1.Object.value.Text 最后的属性应该也可以工作
  • 我得到一个“对象不支持此属性或方法”与您的任一解决方案 dnLL 和 KazJaw
  • 但是您检查过 ActiveWorkbook/ActiveSheet 指的是什么吗?似乎它指的是xlw (c:\myworkbook.xlsx) 而不是位于TextBox1 的文档。
  • 测试也更短的选项...= Activesheet.TextBox1.Text 在用户控件之前使用工作表对象很重要。但是,如果它不起作用,您能否将您的 TextBox 截屏并在此处添加指向该图片的链接?

标签: excel vba runtime


【解决方案1】:

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

编辑

您似乎可以使用GetObject 函数从工作簿中提取文本框。

【讨论】:

  • 知道如何将 textbox1 限定为活动工作表吗?我不相信我可以使用 ActiveSheet.TextBox1
  • 这应该作为评论发布,而不是答案。
  • @dnLL 为什么?这是一个答案,而不是评论或问题。它没有你的回答那么彻底,但它是一个答案by definition
  • 我猜你指的是第八个定义。我仍然不认为以“我认为”和“你可能是”开头的 2 个句子是答案。
【解决方案2】:

您的宏的问题在于,一旦您打开了目标 Workbook(代码示例中为 xlw),它就会被设置为 ActiveWorkbook 对象,而您收到错误,因为该特定 Workbook 中不存在 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 对象,它也将起作用。使用一个或另一个主要取决于您想要做什么(如果有多个工作表等)。

【讨论】:

    【解决方案3】:

    问题在于这一行

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

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

    因此将其替换为

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多