【发布时间】:2021-09-29 05:57:33
【问题描述】:
我也许可以通过示例更好地描述我想要的东西。我有两个 Excel 工作簿。我想基本上将一个复制到一个新工作簿原样(基本复制/粘贴所有内容),然后复制另一个工作簿的特定部分并粘贴它位于新工作簿的末尾。
因此,有两个输入工作簿和一个输出工作簿。这就是我希望宏的结构:应该有一个包含宏(按钮)的“主”工作簿,其中两个输入工作簿由它们的文件夹路径指定,并且有一个新组合的输出文件夹工作簿(请参阅最后的示例,了解我希望如何指定它)。第一个输入工作簿应该复制其中的所有内容。请注意,这应该是动态的,并且不应指定特定的单元格范围(因为单元格范围可能会有所不同)。第一个输入工作簿的示例如下所示:
一切都将被复制。我认为这不是什么大问题。棘手的部分(对我来说)是然后获取第二个输入工作簿的特定部分并将其复制/粘贴到第一个输入工作簿的末尾。我发现这很困难,因为第二个输入文件夹应该由特定的标题选择,然后应该复制该标题下的所有内容(即选择标题,然后按 CTRL+SHIFT+DOWN)。例如:
这应该以“Maturity[5,)”(以黄色突出显示)作为标题,然后选择其下的所有内容,复制它,然后将其粘贴到第一个输入工作簿末尾的匹配标题(第二行,即第 8 行,顺便说一下,这是所有工作簿的格式:第 1:6 行是空的,但应该保持这样)。
希望你还在我身边。完成此操作后,新的(合并的)工作簿应如下所示:
即使走到这一步也会非常有帮助。但是还有一个问题。通过复制整个第一个输入工作簿,有一个额外的标题(第 7 行;上图中的“L-OAS”)。此标题需要在新组合工作簿的范围内合并并居中,包括添加的第二个输入工作簿部分:
就是这样。一旦该标题被合并并在新工作簿中居中,宏应将新工作簿保存在指定的输出路径中。
要指定的输入/输出路径示例:
编辑:以下是我在做第 (1) 部分的尝试——也就是说,只是复制和粘贴第一个工作簿。
Sub Combine()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wsSource As Worksheet, ws As Worksheet
Application.ScreenUpdating = False
shtOutput1.Visible = xlSheetVisible
shtOutput1.Cells.Clear
Set outputRange = shtOutput1.Cells(1, 1)
Set wb1 = Workbooks.Open(Range("USDInputFile1").Value, False, True)
For Each wsSource In wb1.Worksheets
If InStr(wsSource.Cells(1, 1).Value, "Bloomberg") > 0 Then
With wsSource
wsSource.Copy shtOutput1
End With
End If
Next
wb1.Close False
Application.ScreenUpdating = True
With Workbooks.Add
shtOutput1.Copy .Worksheets(1)
Application.DisplayAlerts = False
For Each ws In .Worksheets
Next ws
Application.DisplayAlerts = True
.Close True, ThisWorkbook.Names("OutputFolder").RefersToRange.Value + Application.PathSeparator + "USD Combined Output.xlsx"
End With
shtOutput1.Cells.Clear
shtOutput1.Visible = xlSheetHidden
End Sub
-
“shtOutput1”是主工作簿中的一个工作表(其中宏 按钮和文件路径位于
-
“USDInputFile1”是主工作簿中的一个命名单元格,它导致 第一个输入工作簿的文件路径(即“wb1”-“wb2”将 成为第二个输入工作簿)
【问题讨论】:
-
你试过什么vba代码?或者你被困在哪里了?
-
@PGSystemTester 请查看编辑。这将复制并保存第一个工作簿(即,将所有内容复制并粘贴到新工作簿中,然后保存)——但我仍在努力处理第二部分(使用第二个输入工作簿)
标签: excel vba automation