VBAを勉強したく、練習しています。
現在操作しているマクロ有効ブックの「元シート」のA~G列を、貼り付け先.xlsxの「貼り付け先シート」のA~G列へ値貼付したいのですが、うまくいきません。
(2つのファイルは同じフォルダにファイルは保存されている)
***************************************
Dim WS1 As Worksheets, WS2 As Worksheets
Set WS1 = ThisWorkbook.Worksheets("元シート")
Set WS2 = Workbooks(”貼り付け先.xlsx”).Worksheets("貼り付け先シート")
WS1.Range("A:G").Copy
Workbooks.Open ThisWorkbook.Path & "貼り付け先.xlsx"
WS2.Range("A:G").PasteSpecial xlPasteValues
Workbooks("貼り付け先.xlsx").Close SaveChanges:=True
***************************************
このままだと「型が一致しません」とエラーがでてしまいます。
As Worksheet に変更→「インデックスが有効範囲ではありません」
As Sheets に変更 →「メゾットまたはデータメンバーが見つかりません」
というエラがでてしまいます。
WS1,WS2と定義せず、全部入力すると動作するのですが、なぜこれだとうまくいかないのでしょうか?
知識不足で大変恐縮なのですが、わかる方いらっしゃったら教えていただけないでしょうか?
No.2ベストアンサー
- 回答日時:
すでに解答が出ていますが、私からコメントを入れておきます。
>worksheetとworksheetsの違いがまだよくわからない
英語の単数と複数のようなものですが、Worksheets というのは、コレクションといって、複数同類のオブジェクトが集まっているものを指し示します。シートひとつを選んだのですから、Worksheetsにはなりませんね。
似たようなものに、Windows と Window というものがあります。
Cells は、なぜか複数集まってもいないのに、s がついていますが、たぶん、製作者が何かのミスか、もしかしたら、製作途中で気が変わったのかもしれません。
しかし、Sheets はあるけれども、Sheetはありませんね。Sheet1,Sheet2 があるけれども、よほどのことがない限りは使いません。この辺りは、忘れてしまったほうが良いかもしれません。
私も念のためにコードを残しておきます。
'//
Sub TestMacro()
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim Wb2 As Workbook
Dim fn As String
fn = "貼り付け先.xlsx" '全部を書き直さなくても済みます。
Set Ws1 = ThisWorkbook.Worksheets("元シート")
Set Wb2 = Workbooks.Open(ThisWorkbook.Path & "\" & fn) '変数に確保
Set Ws2 = Wb2.Worksheets("貼り付け先シート")
Ws1.Range("A:G").Copy 'コピー
Ws2.Range("A:G").PasteSpecial xlPasteValues 'ペースト
Wb2.Close SaveChanges:=True
End Sub
ブックは開いた時に、変数に入れられますから、そこでオブジェクトを確保します。
コピーとペーストの間は、短いほうがよいです。途中で、インタラクト(割り込み・妨害)が入ることがあるからです。
このコードの最後に、Set Wb2 = Nothing: Set Ws1 = Nothing などは入れるべきか?
基本的には、単独のプロシージャでは問題はありません。マクロが終わると同時に開放されています。
詳細なコメントなうえに、きれいに整頓していただいてありがとうございます。
私が指定してるのは一つのシートのことだからsはいらないんですね。
ブックは開いた時に変数に入れられる、というのも知らなかったです。
とても勉強になりました!
No.1
- 回答日時:
以下のようにしてください。
①
Dim WS1 As Worksheets, WS2 As Worksheetsではなく
Dim WS1 As Worksheet, WS2 As Worksheet です。
②
Set WS1=
Set WS2=
が有効となるのは、そのブックがオープンされている場合のみです。
③
Workbooks.Open ThisWorkbook.Path & "貼り付け先.xlsx"
ではなく
Workbooks.Open ThisWorkbook.Path & "\" & "貼り付け先.xlsx"
です。(¥が必要です)
--------------------------------------------
Public Sub 貼り付け()
Dim WS1 As Worksheet, WS2 As Worksheet
Set WS1 = ThisWorkbook.Worksheets("元シート")
WS1.Range("A:G").Copy
Workbooks.Open ThisWorkbook.Path & "\" & "貼り付け先.xlsx"
Set WS2 = Workbooks("貼り付け先.xlsx").Worksheets("貼り付け先シート")
WS2.Range("A:G").PasteSpecial xlPasteValues
Workbooks("貼り付け先.xlsx").Close SaveChanges:=True
End Sub
早速ご回答いただきありがとうございます。
ご指示通り直してみたらうまく動作しました!
setのタイミングは大事なのですね…。
worksheetとworksheetsの違いがまだよくわからないのですが、もう少し勉強します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
特定の文字を含むシートだけマ...
-
VBA 入力月で該当シートを選択...
-
VBA 存在しないシートを選...
-
Excel VBA 複数行を数の分だけ...
-
別のシートを参照して計算する方法
-
ユーザーフォームに入力したデ...
-
実行時エラー1004「Select メソ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
実行時エラー'1004': WorkSheet...
-
Excel チェックボックスにチェ...
-
セルのコピーで「オブジェクト...
-
エクセルVBAでダブルクリックを...
-
複数シートに色付きセル(条件つ...
-
重複するidをデータごとにまと...
-
一括印刷マクロ シート名を数字...
-
VBA 最終行まで数式をコピーする
-
Excel マクロについての相談
-
エクセルのシート名変更で重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報