こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【Excel VBA】シートコピー時、マクロコードはコピーしたくない

ws.copy Before:=Workbooks(File).Sheets(1)
Windows(File).Activate
Cells.Select
Selection.copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

上記コードで、シートのコピー・貼付を行っていますが、
コピー元シートのコードも引き継がれてしまいます。
引き継がれないようにコピーしたいのですが、可能でしょうか?

可不可について、
可能ならばそのやり方(コード)を教えていただけないでしょうか?

よろしくお願いします。

投稿日時 - 2008-05-21 17:34:26

QNo.4039431

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは

ご質問で求められている結果に対する理解が不充分かも知れませんが、
  シート(ws)のコピーを、ブック(file)Sheet1の直前に 挿入
  作成したシートの、数式の戻り値を 値に 直す
  シートモジュールのコピーを除いたコード、、、
というお話だと理解しました。


#2さんと殆ど同じなのですが、
元のシート(ws)の書式が新しいシートに反映されるようになってます。
コメントはコピーされますが、他のShapeは残りません。
もし、Shapeまでコピーするのでしたら、別途、ご質問されるとよいと思います。

#3も禁じ手と仰っていますが、
VBAのコードそのものを書き換える方法は、
それ以外に方法がない場合の非常手段だとしても、
余程パーソナルな用途でしか考えない方が良いです。
仕事で使うことが内規違反になる可能性もあるし、
使えない環境もありますので、
私も回答には書きたくないですね。

  ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

Sub TEST()
Const sFile As String = "ファイル名.xls" ' ※
Dim ws As Worksheet ' ※

  Application.ScreenUpdating = False ' ※

  Set ws = ThisWorkbook.Sheets(1) ' ※

  With Workbooks(sFile).Worksheets
  With .Add(Before:=.Item(1))

    ws.Cells.Copy .Cells

    .UsedRange.Value = .UsedRange.Value

    .Activate

  Application.ScreenUpdating = True ' ※
'    MsgBox "Done" ' ※
'    .Delete ' ※
  End With
  End With
End Sub

  ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
     ' ※ の行は、便宜的な記述です。


ご質問と関係ないことを書くことを、お許し下さい。
どうしても書いておきたいので、、、

Wendy02 さん
あなたがいないと、困ります。
出来れば、考え直して頂きたいけれど、
多く学ばせて頂いた一人として、感謝しています。
ありがとう ござい ます!!

投稿日時 - 2008-05-22 02:04:30

お礼

ご回答、ありがとうございました。

ご理解、まさにその通りです。
私が詳細を記述しなかったのでたいへんお手数をおかけしました。

なるほど、私にとって禁じ手を使用するのはまだ危険なようですね。
もう少し上達してから、参考にさせていただきます。

追伸:私もWendy02さんには非常に助けられた一人です。
   何かあったのか存じ上げませんが、
   Wendy02さんはじめこのカテに回答してくださる皆様、
   今後ともよろしくお願いします。

投稿日時 - 2008-05-22 11:41:24

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

可能ですが、推奨はできません。禁じ手とか。
コピーされたコードを削除すればいいですよね。

貼り付けられたSheetの名前のコードを削除する。

参考
http://okwave.jp/qa3859010.html

ANo.4

投稿日時 - 2008-05-21 20:00:40

お礼

ご回答ありがとうございます。

リンク、拝見しました。
私のような初心者には厳しいというかやらない方がよさそうですね、
おっしゃるとおりです。
>注意
うまくできないとExcelの動作がおかしくなることがあるかもしれない。
→怖いですね。
 コピー元の方は半年かけて作成した大作(自分的に^^;)なので

リンク先のやりとりはローカルに保存させていただき、
もっとVBAスキルが向上したら使わせていただくかもしれません。

投稿日時 - 2008-05-22 10:48:01

ANo.2

こんばんは。

ws.copy Before:=Workbooks(File).Sheets(1)

ws を明記していませんし、前の部分でどんな設定されているかは、想像の範囲しかありませんが、おそらく、その部分で、シートのマクロのコピーが出来ています。

'-------------------------------
Set ws = ThisWorkbook.Worksheets(1)

With Workbooks(File).Sheets.Add(Before:=Workbooks(File).Sheets(1))
  ws.Cells.Copy
  .Range("A1").PasteSpecial Paste:=xlPasteValues
  .Name = ws.Name & "_"  'シート名の設定
End With
'-------------------------------

投稿日時 - 2008-05-21 19:16:27

お礼

Wendy02さん、いつもお世話になっています。
私、いつまで経っても初心者の域を抜け出せず、お恥ずかしい限りです、、、。

ご想像の通りです。
教えていただいたソース、参考にさせていただきます。

投稿日時 - 2008-05-22 10:33:09

ANo.1

私がモジュール1にVBAコードのある、あるブックを開いて、シートの範囲指定して、コピーし、新しいエクセルを開きSheets(1)に貼り付けました。
保存して開きましたが、モジュール1は現れません。
事実は間違いないですか。
Personal.xlsとの関連(そっちを見ていること)無いですか。
http://www.relief.jp/itnote/archives/002060.php
>PERSONAL.XLSファイルが存在している場合、Excelが起動する際に非表示状態でPERSONAL.XLSも一緒に開かれているので、個人用マクロブックに保存したマクロは、どのExcelファイルからでも利用することができるようになっています。

投稿日時 - 2008-05-21 18:19:57

補足

失礼しました!
私のもある意味範囲指定でした(シート全体を範囲指定している、という意味でした)。
お礼欄は上記を読み替えてください。申し訳ありません。

投稿日時 - 2008-05-22 09:50:38

お礼

ご回答ありがとうございます。

>シートの範囲指定して、コピーし、新しいエクセルを開きSheets(1)に貼り付けました。

いえ、私の場合はシートそのものを別ブックにコピーしています(範囲指定ではない)。
また標準モジュールではなく、シートモジュールのコードがそのまま引き継がれないことが希望なのですが、、、。

投稿日時 - 2008-05-22 09:50:05

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-