【问题标题】:How can I copy specific range values in Excel VBA?如何在 Excel VBA 中复制特定范围值?
【发布时间】:2020-03-14 09:31:27
【问题描述】:

如何在 Excel VBA 中复制特定范围值? 我试图通过首先创建一个输入框让用户在另一个工作簿中输入该范围来复制一个范围,然后将该范围的值从所有选定的工作簿复制到一个工作簿中。

这是我所拥有的,但它只复制一组值。

    FileNames = Application.GetOpenFilename(FileFilter:="Excel Filter (*.csv), *.csv", Title:="Open File(s)", MultiSelect:=True)
    nw = UBound(FileNames)
    Workbooks.Open FileNames(1)
    Set UserRange = Application.InputBox(Title:="Select Range", Prompt:="Range", Default:=DefaultRange, Type:=8)
    For i = 1 To nw
Set FileNames(i) = ActiveWorkbook
        UserRange.Copy
        tWB.Worksheets("Data").range("A" & i).PasteSpecial Transpose:=True
    Next i

编辑:我只需要打开一个工作簿,将 UserRange 定义为范围,并将该范围内的值复制到所有选定的工作簿中,然后将它们粘贴到 tWB 工作簿中。

【问题讨论】:

  • 那是因为你的代码就是这样写的。 UserRange 永远不会改变,你永远不会打开新的工作簿(打开应该在循环内)。
  • 然后使用UserRange.Address。您仍然需要一个循环来打开其他工作簿
  • 您需要一个循环来按照您的说明打开“所有选定的工作簿”。 Application.GetOpenFilename 不会打开您选择的工作簿。
  • @BigBen,我添加了一个循环来打开每个工作簿,现在结果是准确的 - 谢谢!我选择的每个工作簿都单独打开,这允许代码每次复制不同的值。
  • 好东西!干杯和快乐的编码。

标签: excel vba copy range


【解决方案1】:

正如 BigBen 在 cmets 中发布的那样,我已更改代码以单独打开每个工作簿并每次复制值。这给出了我正在寻找的准确结果。

新代码如下所示:

FileNames = Application.GetOpenFilename(FileFilter:="Excel Filter (*.csv), *.csv", Title:="Open File(s)", MultiSelect:=True)
nw = UBound(FileNames)
For i = 1 To nw
    Workbooks.Open FileNames(i)
    Set UserRange = Application.InputBox(Title:="Select Range", Prompt:="Range", Type:=8)
    UserRange.Copy
    tWB.Worksheets("Data").range("A" & i).PasteSpecial Transpose:=True
    ActiveWorkbook.Close SaveChanges:=False
Next i

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多