我正在尝试编写一些VBA代码以打开多个工作簿,复制一列,然后放入运行宏的那本书中。我需要将复制过来的数据全部放入同一列。这是我的代码:
Sub MeToo_Paste()
'Assign Report Book
Dim x As Workbook
'Assign Source Books
Dim y As Workbook
Dim z As Workbook
'Open Report Book
Set x = Workbooks.Open("C:\Filepath\Documents\Report.xlsm")
'Open Source Books
Set y = Workbooks.Open("C:\Filepath\Documents\Source 1.xlsx")
Set z = Workbooks.Open("C:\Filepath\Documents\Source 2.xlsx")
'Copy & Paste 1
y.Sheets("Sheet1").Range("B2:B500").Copy
x.Sheets("Sheet1").Range("B2").PasteSpecial
'Copy & Paste 2
z.Sheets("Sheet1").Range("B2:B500").Copy
x.Sheets("Sheet1").Range("B2").End(xlDown).Offset(1, 0).PasteSpecial
'Close
y.Close
z.Close
End Sub
我的第一个问题是关于此代码的行为。只有当我运行宏时没有打开任何原始资料时,它才能正常工作。如果在运行代码时还有其他打开的地方,则在我指定的书中不会进行复制和粘贴。它似乎粘贴到我手动打开的最新书中。
我不明白为什么会发生这种情况,因为我将报表设置为“ x”,唯一的粘贴代码应该在“ x”上。
我的第二个问题是关于使这段代码更加优雅。我宁愿不使用剪贴板,而是将要复制的数据设置为变量,所以我将使用以下代码;
Dim Info As Variant
Info = y.sheets("Sheet1").Range("B2").Value
x.sheets("Sheet1").Range("B2").Value = Info
但是,使用这种方法时,我不知道如何从第二本源书中选择想要的范围。因为我需要将所有数据都放在一列中,所以我需要一种方法(“ B2”)更改为该列中下一个空单元格。
答案 0 :(得分:0)
在问题的第二部分尝试以下方法:
Dim rowcount As Long
Dim Info As Variant
Info = y.Sheets("Sheet1").Range("B2").Value
rowcount = x.Cells(x.Rows.Count, 2).End(xlUp).Row
x.Sheets("Sheet1").Range("B" & rowount).Value = Info