[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロを別ブックへコピー』(お寿司)
勉強させて下さい。
以下のブックのシートを書いてハイパーリンクを作るマクロを使っています。
名前が分かりませんが、標準モジュールではなく当該リンクを作るシートのObjectsのSheet1に書いてます。
Sub シート名記載()
Dim i As Byte
For i = 2 To Worksheets.Count
ActiveSheet.Hyperlinks.Add anchor:=Range("c" & i + 2), _ Address:="", _ SubAddress:="'" & Worksheets(i).Name & "'" & "!A1", _ TextToDisplay:=Worksheets(i).Name Next End Sub
これをフォームコントロールのボタンでマクロ名Sheet1.シート名記載をえらんで使ってます。
これが便利なので他のExcelでも使いたいと思い、シートをコピーしてボタンを押したところコピー元のExcelが開き、コピー元に記載がされてしまいます。
マクロの登録をし直せば望む動作が行われますのでコードではなくボタンの設定が悪いのかと思ったりコードを適切にかけばそんなことないのかと思ったりしますがお手上げです。毎回ボタンのマクロの登録しなおすしかないのでしょうか。
どうすれば良いか分かればご教示願えないでしょうか。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
旧Book名!Sheet名.マクロ名
になっていると思います。これを
新Book名!Sheet名.マクロ名
にする必要があります。
以下に同じ質問をしている人がいて、マクロで書き換えることが提案されています。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11157690516
(ゆたか) 2023/10/20(金) 11:03:56
誤)新Book名!Sheet名.マクロ名
正)Sheet名.マクロ名
(ゆたか) 2023/10/20(金) 11:14:27
自分は個人マクロブックとかに入れたりそもそも分かるので良いのですが他人がワンクリックで使いたいと思っているところです。
(お寿司) 2023/10/20(金) 11:23:50
1.シートを旧ブックから新ブックへコピーする
2.ブック名変更用のマクロを動かす
ブック名変更用のマクロはボタンに登録する必要はないですが、しても構いません。
その場合には、そのボタンの登録マクロ名だけ、手作業で変更する必要があります。
(シートのモジュールとして書いておけば、シートと一緒にコピーされますね)
ただ、コピーされたブックで1回だけ実行する処理ですから、マクロエディタから起動すれば良いと思いますよ。
(ゆたか) 2023/10/20(金) 11:38:07
ActiveXコントールのCommandBottunを使えばいいのでは? Formコントロールである必要がありますか? (´・ω・`) 2023/10/20(金) 11:38:33
知恵袋のは汎用性あるタイプでそのまま流用してで良いんですかね。
(´・ω・`)様
特段必要は無いですが触れたことがなくまた、
そのように回答している知恵袋を見つけやってみた結果失敗したので諦めた経緯があります。
(お寿司) 2023/10/20(金) 12:05:35
■1
↓ですから、(´・ω・`)さんのアドバイスが一番手っ取り早いのでは?
>標準モジュールではなく当該リンクを作るシートのObjectsのSheet1に書いてます。
適当に直しましたが↓のようなことじゃないですか?
#シートモジュールに記述すること
Private Sub CommandButton1_Click() Dim 出力行 As Long, MySH As Worksheet 出力行 = 4
For Each MySH In Me.Parent.Worksheets If MySH.Name <> Me.Name Then Me.Hyperlinks.Add _ anchor:=Me.Cells(出力行, "C"), _ Address:="", _ SubAddress:="'" & MySH.Name & "'" & "!A1", _ TextToDisplay:=MySH.Name 出力行 = 出力行 + 1 End If Next MySH End Sub
■2
>ちなみに〜知恵袋のは汎用性あるタイプでそのまま流用してで良いんですかね。
質問の意味がよくわかりません。
インデントが付いておらず見ずらいので整理してみると↓のようになっているわけですよね。
どのあたりが理解できないのでしょうか?
Sub 整理() Dim oSh As Worksheet Dim oShape As Shape
For Each oSh In ActiveWorkbook.Sheets For Each oShape In oSh.Shapes With oShape If oShape.OnAction <> vbNullString Then '▼ここでマクロの登録し直しをしている oShape.OnAction = ThisWorkbook.Name & "!" & Split(oShape.OnAction, "!")(1) End If End With Next Next End Sub
(もこな2 ) 2023/10/20(金) 14:50:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.