- 締切済み
シートモジュールのマクロを標準モジュールに移したいのですが・・
マクロを標準モジュールでなく、うっかりsheet2に作成しました。 作動は問題なかったのですが、sheet2を差し替える事になったので、 マクロを標準モジュールにコピーしたいのですが、標準モジュールではうまく作動しません。 なにが原因で解決するにはどうすれば良いのか全くわかりません。 マクロ初心者でネットを参考にしながら作成したので詳しい事は分かりませんが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
何度も失礼します。 まさかとは思いますが、Sheet1(貼り付けられるほう)に「シート保護」なんてしてませんよね?
- merlionXX
- ベストアンサー率48% (1930/4007)
> やはり本来はRange(Cells(行, 1))で良いのでしょうか? ひとつのセルなんですよね? ならば、Range(Cells(行, 1))ではなく、Cells(行, 1) です。 A-B列にまたがる2つのセル範囲なら Range(Cells(行, 1),Cells(行, 2)) のように書きますが。 で、わたしのところではエラーを再現できませんでしたのでお手上げです。 えらそうに回答してきましたが、結局何のお役にも立てずごめんなさい。 (o。_。)oペコッ
お礼
とんでもない。ご助言有難うございました。 単純なマクロは今までやってきましたが、少々込入ったのは今回が初めてで奥の深さを痛感しております。
- merlionXX
- ベストアンサー率48% (1930/4007)
よくわかりませんが Range(Cells(行, 1), Cells(行, 1))って、ただのCells(行, 1)ですよね? Sub データ反映() 行 = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row Worksheets("Sheet2").Cells(行, 1).Copy Worksheets("Sheet1").Range("A3").PasteSpecial Paste:=xlPasteValues Worksheets("Sheet2").Cells(行, 2).Copy Worksheets("Sheet1").Range("G3:H3").PasteSpecial Paste:=xlAll End Sub としてもエラーになりますか? ひょっとしてセル結合してる?
補足
修正しましたが同じエラー表記となります。 (行,1)、(行,2)とも結合はしていません。 試しにsheet2のデータをただの(Cells(行, 1))に変えてみました。 結果は「エラー400」でした。 やはり本来はRange(Cells(行, 1))で良いのでしょうか? 気にはなっていたのですが。
- merlionXX
- ベストアンサー率48% (1930/4007)
#1です。 お書きになったコードを拝見しましたが、記入方法はともかく、省略された部分以外は標準モジュールにもっていっても問題になる個所は見当たりません。(Sheet2は差し替えてもSheet2として存在しているのですよね?なければ当然エラーになるでしょうが) 「うまく作動しません。」という書き方では、どうなるのがうまく作動することなのか皆目わかりません。 「実行時エラーになり、○○と表示された」とか、「こうなるはずがこうなった」と具体的に言ってくれないと。
補足
シート名は変更していません。 「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」とメッセージが出ます。 ちなみにsheet1に保存すると「400」とだけエラーメッセージが出ます。
- merlionXX
- ベストアンサー率48% (1930/4007)
シートモジュールに記述したということはそのシートのイベントで作動するマクロなのではないのですか? それなら標準モジュールに持っていっても作動するはずがありません。 > なにが原因で解決するにはどうすれば良いのか全くわかりません。 あなたがわからないものを、そのコードをまったく見ることができない他人がどうやって解決できるとお思いですか? わからないならそのコードを掲示されたらいかがでしょう?
補足
失礼しました。 sheet2のデータを参照してsheet1の見積書フォーマットに落とし込むというマクロで、合計金額算出や内容クリアのマクロはsheet1に作成していました。そのマクロは標準モジュールに移しても問題なかったもので。 コードは以下のようなものです。 Sub データ反映() 行 = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row Worksheets("sheet2").Range(Cells(行, 1), Cells(行, 1)).Copy Worksheets("sheet1").Range("A3").PasteSpecial Paste:=xlPasteValues Worksheets("sheet2").Range(Cells(行, 2), Cells(行, 2)).Copy Worksheets("sheet1").Range("G3:H3").PasteSpecial Paste:=xlAll ・ ・ ・ End Sub
お礼
解決しました! ご指摘のあったRangeとCellsを見直していたのですが、複数セルの選択コード Range(Cells(行, 3), Cells(行 + 12, 7)).Copy を Range("C" & 行 & ": G" & 行 + 12).Copy に変えてあげると作動しました。同じようなコードが長々と続くので省略しましたが、最初から全てのコードを提示するべきでしたね。
補足
保護していません。 ドキっとしました。何度か保護した状態で作動チェックをしていたので。