0

现在,我正在创建一个新的工作簿,其中 12 个列名都在第 1 行,每次运行宏来测试它时,工作簿都有不同的名称(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   

是否有可能一旦用户选择文件,我可以选择某些列并将它们粘贴到这个新工作簿中?

任何帮助将不胜感激!谢谢!

4

1 回答 1

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 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)
于 2012-09-10T16:14:03.060 回答