0

現在、行1にすべて12の列名を持つ新しいブックを作成しており、マクロを実行してテストするたびに、ブックの名前が異なります(Book1、Book2、...)。

閉じたブックから特定の列を取得して、この新しいブックの別の列に貼り付けたいと思います。私のマクロでは、ユーザーがファイル( "Y:... \ Test.xls")を選択しているため、GetValuesFromAClosedWorkbookを使用したくありません。

次のコードは機能しますが、ブックの名前がわからないため、希望するほど自動化されていません... 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 に答える