现在,我正在第1行创建一个包含12个列名的新工作簿,每次运行我的宏来测试它时,工作簿都有不同的名称(Book1,Book2,....)
我希望从CLOSED工作簿中获取特定列,并将它们粘贴到此新工作簿中的不同列。我不想使用GetValuesFromAClosedWorkbook,因为在我的宏中,用户正在选择文件(“Y:... \ Test.xls”)。
我有以下代码可以使用,但不像我希望的那样自动化,因为我不知道工作簿的名称......是否是Book1,Book2等等......因为它打开了文件,我不希望它这样做。
Workbooks.Open Filename:="Y:\......\Test.xls"
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Book1").Activate
ActiveWorkbook.ActiveSheet.Range("B2").PasteSpecial Paste:=xlValues
一旦用户选择文件,我可以选择某些列并将其粘贴到这个新工作簿中吗?
任何帮助将不胜感激! 谢谢!
答案 0 :(得分:3)
当您打开工作簿时,您可以执行以下操作:
Dim wb as WorkBook
Set wb = Workbooks.Open("filepathhere")
或者当您添加新工作簿时:
Set wb = Workbooks.Add()
然后,您可以使用参考wb
:
Dim rngCopy as Range
Set rngCopy = wb.Sheets(1).Range(.Range("D3"), .Range("D3").End(xlDown))
wb2.Sheets("sheetname").Range("B2").Resize(rngCopy.Rows.Count).Value = rngCopy.Value
wb
是您打开的文件,wb2
是新添加的工作簿。
使用"助手" sub执行复制:
Sub DoCopy(rngFrom as Range, rngTo as Range)
Dim rngCopy as Range
Set rngCopy = rngFrom.Parent.Range(rngFrom,rngFrom.End(xlDown))
rngTo.Resize(rngCopy.Rows.Count).Value = rngCopy.Value
End Sub
如果要复制值和格式:
Sub DoCopy(rngFrom As Range, rngTo As Range)
rngFrom.Parent.Range(rngFrom, rngFrom.End(xlDown)).Copy
rngTo.PasteSpecial xlPasteFormats
rngTo.PasteSpecial xlPasteValues
End Sub
用法:
'updated to copy values to first empty row (NOTE: all copied columns
' must be the same length)
Dim shtDest as Worksheet
Set shtDest= wb2.Sheets("sheetname")
DoCopy wb.Sheets(1).Range("D3"), shtDest.Cells(.Rows.Count, 2).end(xlUp).offset(1,0)
DoCopy wb.Sheets(1).Range("G3"), shtDest.Cells(.Rows.Count, 3).end(xlUp).offset(1,0)