-1

範囲を新しいワークブックにコピーするコードを見つけましたが、なぜ機能するのかわかりません。

Worksheets("Short Form").Copy
Set wb = ActiveWorkbook

コードがアクティブなワークブックを参照 'wb' に割り当てるだけである場合、ワークシート 'Short Form' を新しいワークブックにコピーするにはどうすればよいですか? .add メソッドも使用していません。現在、この新しいワークブックにのみ値を貼り付けたいのですが、このコード ブロックを理解していないため、その方法がよくわかりません。

4

2 に答える 2

1

これを試してください-次の手動の手順はコードスニペットと同じです:

1.空白のワークブックを開きます2.
レコードマクロを押します3.Sheet1
ワークブックタブを右クリックします4.[
移動またはコピー]
を選択します5.[ブックへ]コンボで(新しいブック)を選択します6.[
コピーの作成]をオンにしますボックスを開いて、ウィンドウが次のようになるようにします
ここに画像の説明を入力してください 。7.レコーダー
を停止します。8。記録されたコードを見つけます...そして出来上がり....私のものは次のようになります。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet1").Select
    Sheets("Sheet1").Copy
End Sub

コードは、これらの手動の手順で説明されているものと同じです。


Dim wb as workbookどこかに行が必要 です。そうしないと実行されません。

この行Set wb = ActiveWorkbookは、オブジェクトwbがアクティブであるため、コピー先の新しいブックと同じになるため、さらに操作を行うことができます。wbが指すワークブックは簡単に切り替えることができます。

Sub Macro1()
Dim wb As Workbook

ThisWorkbook.Sheets("Sheet1").Copy
Set wb = ActiveWorkbook
MsgBox wb.Name
ThisWorkbook.Activate
Set wb = ActiveWorkbook
MsgBox wb.Name

End Sub

しかし
、私のプロダクションコードでは、通常は使用しませSet x To ActiveWorkbookん。常にワークブックに名前を付けてから使用します。Set x To Workbooks("DefiniteName")


クリップボードを使用せずにクリップボード
の使用を避けたい場合は、次の例に、貼り付けを使用せずに値のみのデータを移動する方法を示します。

Sub WithoutPastespecial()


Dim firstRange As Range
Set firstRange = ThisWorkbook.Worksheets("Short Form").Range("S4:S2000") 'can change S4:S2000 to the range you want to copy

Dim newBk As Workbook
Dim secondRange As Range
Set newBk = Workbooks.Add
Set secondRange = newBk.Worksheets("Sheet1").Range("A1")

With firstRange
      Set secondRange = secondRange.Resize(.Rows.Count, .Columns.Count)
End With
secondRange.Value = firstRange.Value

End Sub
于 2013-03-13T21:19:39.527 に答える
0

これはRangeむしろ全体のworskheetをコピーしているのではないことに注意してください:)

この方法を使用する場合:

Worksheets("Short Form").Cells.Copy

次に、ワークシート全体ではなくセルのみをコピーします。この方法では、新しいブックは作成されません。必要に応じてワークブックを追加するように指示できます。

次に例を示します。

Option Explicit

Sub CopyNew()
Dim wbNew As Workbook
Dim wb As Workbook

Set wb = ThisWorkbook  'It is a good idea to explicitly control workbooks using either a defined variable like "wb" or the "ThisWorkbook" object, instead of using "ActiveWorkbook" or referring to files by name.

Application.CutCopyMode = False
wb.Sheets("Short Form").Cells.Copy


'Add a new workbook for the values:
Set wbNew = Workbooks.Add

wbNew.Sheets(1).Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


End Sub
于 2013-03-13T21:27:17.833 に答える