これが怖いの自分だけ?というものありますか?

シート内にマクロボタンを設置しており、
それをクリックすると、そのシート内の表が指定した項目順にソートされるようになっています。仮に「シート1」とします。

しかし、このシートをコピーやリネームして「シート2」にすると正常動作しません。
原因は分かっていて、ソースを見ると「シート1」の記述のままになっているからだと思います。
シート名を変更したり、コピーしても常に、「自分自身のシート内で動作する」という指定をする方法は無いでしょうか?

A 回答 (3件)

シートモジュールに書かれているマクロの場合


Meが自身のワークシートになります。ですから以下の様に置換してください。

Worksheets("シート1") → Me
シート名文字列 "シート1" → Me.Name

もし標準モジュール上のプロシージャにシート名が直接書かれている場合は、
ボタンクリックイベントで標準モジュールのプロシージャを呼び出す際に、引数として自身のシート名をプロシージャに渡して利用するように変更して下さい。
    • good
    • 4
この回答へのお礼

回答ありがとうございます。
最初からソースを具体的に挙げておけば良かったですね。失礼いたしました。

ソースの一部ですが、下記のような記述となっております。

ActiveWorkbook.Worksheets("元データ").Sort.SortFields.Add Key:=Range("C8:C37"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

これはマクロの記録を録っただけの状態です。
標準モジュール - Module1内(General)に記載されておりました。
シートをコピーして各シート上で動作するようにするにはどうしたら良いでしょうか?

お礼日時:2018/10/04 10:13

Worksheets("Sheet1")~~を ActiveSheet~~に変える。



また、シート名を省略するとActiveSheetに対しての操作になるので、~~の前をなくしてもいいかも。

ただし、私は最近VBAいじってないので、自信ないです。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
最初からソースを具体的に挙げておけば良かったですね。失礼いたしました。

ソースの一部ですが、下記のような記述となっております。

ActiveWorkbook.Worksheets("元データ").Sort.SortFields.Add Key:=Range("C8:C37"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

これはマクロの記録を録っただけの状態です。
標準モジュール - Module1内(General)に記載されておりました。
シートをコピーして各シート上で動作するようにするにはどうしたら良いでしょうか?

お礼日時:2018/10/04 10:13

シート1の部分をアクティブシートにしたらどうでしょうか。

    • good
    • 0
この回答へのお礼

そのやり方もう少し教えていただけませんか?

お礼日時:2018/10/03 18:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A