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