Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5611 / 13645 ツリー ←次へ | 前へ→

【49801】シート別のマクロの動かし方 勝子 07/6/22(金) 16:58 質問[未読]
【49802】Re:シート別のマクロの動かし方 ぱっせんじゃー 07/6/22(金) 17:10 発言[未読]
【49803】Re:シート別のマクロの動かし方 Jaka 07/6/22(金) 17:20 発言[未読]
【49804】Re:シート別のマクロの動かし方 Kein 07/6/22(金) 17:55 発言[未読]
【49805】Re:シート別のマクロの動かし方 勝子 07/6/22(金) 18:03 質問[未読]
【49808】Re:シート別のマクロの動かし方 Misako 07/6/23(土) 7:41 発言[未読]
【49872】Re:シート別のマクロの動かし方 勝子 07/6/26(火) 9:37 お礼[未読]

【49801】シート別のマクロの動かし方
質問  勝子  - 07/6/22(金) 16:58 -

引用なし
パスワード
   こんにちは 勝子と申します

マクロの設定されているファイルにシートを追加して
コピー元シート(マクロ有り)から追加したシートに
”コピー−貼り付け−並び替え−不要行削除”のマクロを作成しました。

そのマクロを実行すると、コピー元のマクロが動いてしまいます。
どうしたら、コピー元のマクロが動かなくなるのでしょうか?
教えてください。
よろしくお願いいたします

【49802】Re:シート別のマクロの動かし方
発言  ぱっせんじゃー  - 07/6/22(金) 17:10 -

引用なし
パスワード
   シート名が定数になっていませんか?
コードをアップしてみてください。

【49803】Re:シート別のマクロの動かし方
発言  Jaka  - 07/6/22(金) 17:20 -

引用なし
パスワード
   >そのマクロを実行すると、コピー元のマクロが動いてしまいます。
どうやってマクロを動かしているんですか?
ボタン等からなら、マクロ登録をしなおせば良いと思います。

【49804】Re:シート別のマクロの動かし方
発言  Kein  - 07/6/22(金) 17:55 -

引用なし
パスワード
   >コピー元のマクロが動いてしまいます。
というのは、実際のコピー元が処理されるのでなく
「コピー先において同じ動作をしてしまう」という意味でしょーか ?
それならそのシートのシートモジュールに、何かのイベントマクロを
入れたまま、コピーしてしまったからでしょう。
対処としては、直接シートモジュールにあるコードを削除してしまえば
良さそうに思えますが、それはマクロでマクロを弄るウィルスと同じ動作
になるので回答できません。なので初めにコピー先に新規シートを挿入し、
コピー元から全セルだけコピーして貼り付ける、という処理をお勧めします。

【49805】Re:シート別のマクロの動かし方
質問  勝子  - 07/6/22(金) 18:03 -

引用なし
パスワード
   作成したマクロのコードは
'貼り付けるシートのクリア(これが新規シート)
  Sheets("実験").Select
  Range("B2:N500").Select    '2行目から500行目までを選択
  Selection.ClearContents    'セルをクリア
  Range("A1").Select

'コピー元の範囲選択
  Sheets("登録").Select
  Range("B17:M1500").Select
  Application.CutCopyMode = False
  Selection.Copy
  
'貼り付けるシート(これが新規シート)
  Sheets("実験").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Application.CutCopyMode = False
  
  
'並び替え(人(昇順)>部屋(昇順)>番号(昇順))
  '人は11,12,13のみが表示となる
  Selection.Sort Key1:=Range("I2"), Order1:=xlAscending, _
          Key2:=Range("G2"), Order2:=xlAscending, _
          Key3:=Range("H2"), Order3:=xlAscending, _
          Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _
          DataOption1:=xlSortNormal, DataOption2:= _
          xlSortTextAsNumbers, DataOption3:=xlSortTextAsNumbers
  Columns("H:H").Select
  Range("H2:H50").Select
    
'人15以上を削除
   For Loop_Cnt = 2 To 500
     If (Cells(Loop_Cnt, 9) + 0) > 15 Then
       Rows(Loop_Cnt).Select
       Selection.Delete Shift:=xlUp
       Loop_Cnt = Loop_Cnt - 1
     End If
  Next Loop_Cnt
  
  
  Range("A1").Select
  ActiveWindow.SmallScroll Down:=9
  
  
End Sub
と上記の通りです。
マクロの記録作成から作ったので余分な箇所も有ります

【49808】Re:シート別のマクロの動かし方
発言  Misako  - 07/6/23(土) 7:41 -

引用なし
パスワード
   ▼勝子 さん:
>作成したマクロのコードは
>'貼り付けるシートのクリア(これが新規シート)
>  Sheets("実験").Select
>  Range("B2:N500").Select    '2行目から500行目までを選択
>  Selection.ClearContents    'セルをクリア
>  Range("A1").Select
>
>'コピー元の範囲選択
>  Sheets("登録").Select
>  Range("B17:M1500").Select
>  Application.CutCopyMode = False
>  Selection.Copy
>  
> '貼り付けるシート(これが新規シート)
>  Sheets("実験").Select
>  Range("B2").Select
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>  Application.CutCopyMode = False

ここまでのコードに関する質問と思いますが・・・
貴方の意図通りの動作ではないのでしょうか?

>そのマクロを実行すると、コピー元のマクロが動いてしまいます。
>どうしたら、コピー元のマクロが動かなくなるのでしょうか?
の質問の意味が分かりかねます・・・
シートが変わる?っと言う意味でしょうか?

もう少し、表現を変えて説明していただければ、分かりやすいかもね。

【49872】Re:シート別のマクロの動かし方
お礼  勝子  - 07/6/26(火) 9:37 -

引用なし
パスワード
   こんにちは 勝子です。

説明が下手ですみませんでした。
理解はしきれていないのですが、

 Public macroFlg As Boolean というのを使って
実行するシートのマクロに
 macroFlg = True  を設定し

マクロが実行して欲しくない
コピー元のほうに
 If macroFlg = True Then
   Exit Sub '逃げ!!
 End If
という方法で脱出することが出来るようになりました。

皆さんからアドバイスをいただき
第3者に説明する難しさを改めて実感しました。

また次回もよろしくお願いいたします。

5611 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free