【问题标题】:Excel VBA - Can I manipulate data on another workbook?Excel VBA - 我可以在另一个工作簿上操作数据吗?
【发布时间】:2015-01-30 22:29:41
【问题描述】:

背景:

每个月我都需要生成一份报告。但是,在执行此操作之前,我必须将一些数据导出到 Excel 中。一旦数据在 excel 中,我必须更改一些列并获得正确的格式,然后才能将其附加到另一个文档的末尾以进行一些分析。

我想要什么:

我想要打开附加数据的文档。然后,我将从我的程序中将数据导出到 excel 中(excel 只是打开数据并且它没有保存在任何地方)并从我的较大文档中运行一个 VBA 脚本,该脚本将更改另一个工作簿(Book1)上的数据,以便如果格式正确,可以将其复制到分析文档中。

到目前为止我所拥有的:

我已经开始基本了。到目前为止,我要做的就是将所有单元格设置为正确的高度,以使其更易于阅读。但是,当我运行此代码时,我得到:

运行时错误'9':

下标超出范围

我目前的代码是:

Sub Data_Ready_For_Transfer()

' Format all cell heights to 15
    With Workbooks("Book1.xlsm").Worksheets("Sheet1")
        Cells.RowHeight = 15
    End With
End Sub

代码的With Workbooks("Book1.xlsm").Worksheets("Sheet1") 部分似乎存在问题。我也尝试过With Workbooks("Book1").Worksheets("Sheet1"),并且我已经在打开的、未保存的文档和已保存的工作簿版本上进行了尝试。

我是否遗漏了一些明显的东西?

【问题讨论】:

  • 1) 应该打开工作簿Book1。请再次检查With Workbooks("Book1").Worksheets("Sheet1") - 如果你真的有工作簿Book1 opened 和工作表Sheet1,它应该可以工作。 2)您应该使用.Cells.RowHeight = 15 instread Cells.RowHeight = 15 指定单元格属于book1->sheet1
  • Workbook Book1 已打开,但我仍然遇到问题。 - 感谢其他修改建议。
  • 让我们做一个小测试,运行这段代码:For Each wb In Workbooks: MsgBox wb.Name: Next。有没有弹出你Book1的消息?
  • 这很有趣。尽管打开了两个工作簿,但它只看到一个。 Book1 不是同一个 excel 实例中的窗口是否重要。而是打开一个新的 Excel 应用程序?
  • 我刚刚考虑过:) 当您使用For Each wb In Workbooks 时,它实际上与当前ApplicationFor Each wb In Application.Workbooks 相同。如果您有另一个应用程序对象,例如 xlApp,您应该使用此应用程序访问工作簿:For Each wb In xlApp.Workbooks

标签: vba excel


【解决方案1】:

作为 cmets 的后续工作,工作簿 Book1Application 对象的另一个 实例中打开。

在这种情况下,这段代码应该可以工作(对于已经打开的工作簿):

Sub Data_Ready_For_Transfer()
    Dim wb As Workbook

    Set wb = GetObject("Book1")

    'if we get workbook instance then
    If Not wb Is Nothing Then
        With wb.Worksheets("Sheet1")
            .Cells.RowHeight = 15
        End With
    End If
End Sub

还有一个问题,我已将Cells.RowHeight = 15 更改为.Cells.RowHeight = 15 以指定Cells 属于工作簿Book1 工作表Sheet1

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2019-12-09
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多