【问题标题】:Import data from a closed workbook into an existing worksheet using VBA?使用 VBA 将数据从关闭的工作簿导入现有工作表?
【发布时间】:2020-06-15 13:27:21
【问题描述】:

我有一段 VBA 代码,可以将另一个工作簿中的一段数据导入我打开的 Excel 电子表格,但是,如果导入我已经创建的工作表,它不会导入。它每次都想打开一个新工作表。

这是代码:

Sub ImportCurrentMonthData()
' Get workbook...
Dim ws As Worksheet
Dim filter As String
Dim targetWorkbook As Workbook, wb As Workbook
Dim Ret As Variant

Set targetWorkbook = Application.ActiveWorkbook

' get the customer workbook
filter = "Excel files (*.xlsb),*.xlsb"
Caption = "Please Select an input file "
Ret = Application.GetOpenFilename(filter, , Caption)

If Ret = False Then Exit Sub

Set wb = Workbooks.Open(Ret)

wb.Sheets(1).Move After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count)

ActiveSheet.Name = "CurrentMonth"

我已经有一张名为“CurrentMonth”的工作表,我想将数据放入该电子表格。为了发生这种情况,我需要在 VBA 代码中进行哪些更改?

提前致谢。

【问题讨论】:

  • 您可以激活“CurrentMonth”表:wb.Worksheets("CurrentMonth").Activate 问题是如何导入数据?
  • "CurrentMonth" 工作表在您的活动工作簿中,还是在您刚刚打开的工作簿中?如果在您的活动工作簿中,在打开第二个工作簿之前,您应该在 Set targetWorkbook = Application.ActiveWorkbook 之后立即移动代码。但是你的问题在哪里?您的代码不执行任何操作。您实际上将打开的工作簿的活动工作表命名为“CurrentMonth”。这就是你想要做的?
  • @TomaszPaluch “CurrentMonth”表是我想要数据去的地方。此 VBA 当前将选定的电子表格导入到我的活动工作簿中,但创建了一个名为“CurrentMonth”的新工作表,我希望它导入到已经存在的工作表中,而不是打开一个新工作表。
  • @FaneDuru 该代码当前将打开一个关闭的工作簿并将数据导入到活动工作簿中的新工作表中,并将其命名为“CurrentMonth”。相反,我希望它将数据导入到已经存在的工作表中。这有意义吗?
  • 它没有...试试,请回答我的问题。 “"CurrentMonth" 工作表在您的活动工作簿中,还是在您刚刚打开的工作簿中?”。 “可是你的问题在哪里?”您收到错误消息吗?上面的代码没有做任何事情,除了打开新工作簿并将其活动工作表重命名为“CurrentMonth”、“这是你想要做的吗?”

标签: excel vba import


【解决方案1】:

如果您只想将数据从顶部复制到现有工作表中......

Sub ImportCurrentMonthData()

    ' Get workbook...
    Dim ws As Worksheet
    Dim filter As String
    Dim targetWorkbook As Workbook, wb As Workbook
    Dim Ret As Variant

    Set targetWorkbook = Application.ActiveWorkbook 'ThisWorkbook?

    ' get the customer workbook
    filter = "Excel files (*.xlsb),*.xlsb"
    Caption = "Please Select an input file "
    Ret = Application.GetOpenFilename(filter, , Caption)

    If Ret = False Then Exit Sub

    Set wb = Workbooks.Open(Ret)

    wb.Sheets(1).Usedrange.Copy targetWorkbook.Sheets("CurrentMonth").Range("A1")

【讨论】:

  • 谢谢,但现在出现错误代码“1004” - 应用程序定义或对象定义错误。当我推送调试时,它会突出显示最后一句话。
  • 抱歉,从您发布的代码中复制/粘贴错误。现已修复
  • 行得通!谢谢你,如果你能这么好心,最后一个请求。有没有办法让它不打开关闭的工作簿?那么如果它只导入数据呢?这可能是我自己的代码的一部分需要更改,但我想不出来。
  • 如果要复制数据,您必须打开文件。如果您的数据结构类似于表格,那么您可以使用 SQL 来查询工作表,但这比打开/复制/关闭更复杂。
  • 感谢您的回答,电子表格作为 VBA 的一部分复制后,有什么方法可以关闭它?
猜你喜欢
  • 2017-10-29
  • 1970-01-01
  • 2018-01-25
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多