
マクロを作成して、人に配ろうかと考えています。ツールバーにコマンド追加してマクロを登録しました。ユーザー設定で、ツールバーの添付で保存(xls)して、別にアドインファイル(xla)で保存しました。別のパソコンにアドインすると、Personal.xlsにマクロが見つかりません。って出てきます。自分のパソコンにもどって、アドインし、コマンドを実行すると、元のxlsファイルが自動的に読み込まれて、実行できてしまいます。ユーザー設定を開きマクロの登録を見てみると、元のxlsファイルが関連付けられてしまっています。(因みに、マクロは、Private としています。
どうにか?アドインファイルだけで完結したいのですが、どのようにすればいいのでしょうか?教えてください。宜しくお願い致します。
No.5ベストアンサー
- 回答日時:
> アドインファイルのシートって見ることが出来るのですか?
アドインのシートは通常見えませんが、下記の手順で見ることが可能です。
前提:Excel で対象アドインを有効にしておく
1. VBE のプロジェクトエクスプローラーで、そのアドインの
ThisWorkbook モジュールを選択
2. プロパティーウインドウで IsAddin プロパティーの値を
False に変更
なお、元に戻すときは IsAddin プロパティーを True にします。
余談ですが、実はアドインは(*.xla) でなくても構わないのです。IsAddin
プロパティー Ture / False が重要で、別に(*.xls)のまま IsAddin を
True としてもアドインとして機能します。
しかし、ユーザーにとってはアドインと言えば(*.xla)なので混乱を避ける
意味で、最終的には(*.xla)にすべきと考えます。 (*.xls)でアドインと
して運用するのは止めた方が良いでしょう。
# 文字化けは解決できました?^^
この回答への補足
重ね重ねありがとう御座います。
文字化けの件は、まだ解決していません。説明が悪かったのですが!!1行目の"Caption"の文字が"ÒÆ­°–¼"と文字化けします。(ブックの読み込み時は一瞬だけ"Caption"の表示がされて書き換えられる)このことから、バイリンガル対応にしている部分で、当方の設定との相性が悪いのだと思います。機能的には、問題なく動いています。(但し、30個のボタンを登録しようとすると13個ぐらいまでしか生成してくれません。一番左の数字を一部消すと、30個まで生成します。原因不明)との他"OK"やラベル表示が書き換えられています。が、適当にクリックすれば、使える状態です。一応、報告まで。(実用上、別に、いいかなぁ?って思っています。)ありがとう御座いました。
"ÒÆ­°–¼"の部分は、補足するをクリックすると別のものに置き替えられてしまってます。よって、今ご覧の文字は、違っています。(これも説明が悪いなぁ!!すみません)
No.6
- 回答日時:
wan_wanさん, こんばんは。
KenKen_SPさん、お久しぶりです。(ちょっと、事情があって、ここを離れていました。)
>文字化けの件は、まだ解決していません。
それは、OSの文字の問題だと思います。私は、そのツールを使ってはいませんが、おそらく、Unicode と ANSIの問題で、解消はされないと思います。私の持っている日本語対応のあるツールでも、9x系は、文字化けしますが、2x系は、問題がありません。ですから、9x系では、諦めて英語にしています。
No.4
- 回答日時:
> やはり、人のパソコンにアドインするとPersonal.xls内で探してしまうようです。
ご自分の PC で MyAddin!Macro1 と設定しても、それを保存したときに
フルパスに書き換えられるためだと思います。
MyAddin!Macro1 → 'C:\Document and Setting..(略)...\MyAddin.xla..
みたいな感じでしょうね。ユーザー名が違えば、パスも変わりますので、
それを他の PC に持って行ってもダメなのかと、、、
正直、ツールバーの添付というのはやったことがないので、正確なとこ
ろは良く分かりません。すみません。
結論として、VBA でメニューを追加する方向で検討された方が早い気が
しますので、オススメします。
> 文字が化けてしまいます。(いわゆるウルトラ文字みたいなの・・
当方では文字化けはありません。MenuGenerator.xls でメニューを作成する
シートのフォントが Verdana になってますが、これを MS Pゴシックなどの
日本語 Windows 標準フォントに直してからメニュー作成ウィザードを行って
みて下さい。どうも、このシートをアドイン側に複製するようです。
関係ないかもしれませんが....
これも正確なところ良く分かりません。すみません。
> ファースを任意のドット絵にする方法ってあるのでしょうか?
MenuGenerator.xls はメニューを定義したシートをアドインに配置して
それを読み取りながらメニューを作成するようです。したがって、
難しいでしょうね....
その場合は、#3~4 で Wendy02 さんが具体的なコードを提示されてますので、
そちらを参考になさって下さい。
私見ですが、規定のモノでも千個ぐらいのアイコンがある訳で、その中で使え
そうなものは使った方が良いのではないかと思います。独自の画像を使うと、
アドインのファイルサイズが大きくなるので、読み込み時(Excel 起動時)に
時間がかかります。
うーーん、、ほとんど役にたたないレスになってしまいましたね。
本当にすみません。
# Wendy02 さん、お久しぶりです^^
この回答への補足
教えて頂いたツール使ってみました。凄く便利です。大変助かります。ありがとう御座います。ところで、全然違う話なんですが、アドインファイルのシートって見ることが出来るのですか?強制的に拡張子をxla→xlsに変更してみようと試みても駄目でした。(これが出来れば、アドインファイルの隠匿性がなくなるので元々出来ないようになっているのかも?)わかる範囲で教えて頂ければと存じます。宜しくお願い致します。
また、方向性としては、ご指導の通りにメニュー追加で進めます。大変ありがとう御座います。
No.3
- 回答日時:
こんにちは。
>オリジナルで編集したFace(例えば、ニコちゃんマークを貼り付け、ユーザー設定のボタンイメージの編集で改変したFaceを自作したツールバーに貼り付ける方法ってあるのでしょうか?
私の知っている方法は、アドイン・ファイルのワークシート側にあらかじめ、ビットマップの絵などを、貼り付けておきます。
すでに、アドインとして出来上がっても、貼り付ける方法は、お分かりになりますよね。要するに、マクロで貼り付ければよいだけですから、シートを開けなくてもよいわけです。
そのような条件として、
Sheet1.Shapes(1).Copy 'クリップボードにコピーさせ
With myCBCtrl.Controls.Add(Type:=msoControlButton)
.Caption = "マクロ1(&A)"
.OnAction = "myMacro1"
'.FaceId = 351 これは使わない
.PasteFace '絵を貼り付ける
End With
このようにして、自作のボタン・イメージをボタンに貼り付けるわけです。
もしかした、Excel2003では、直接、呼び出す方法があるような気がしていますが、私の手元にはありませんので、私の知る範囲では、これだけです。
>アドインを解除する時には、Application.CommandBars("○○○").Visible = Falseとして非表示にしています。(Deleteで削除すればいいのかも?)
>コマンドのフェースが上手く改変できずにここで質問したところ、ブックに埋め込むこともできる
確か、埋め込んだ(個別にコピーされた)ツールボタンは、自動的に 相手側にExcel.xlb にコピーされたはずです。(私はやったことがありませんが、他人のマクロでは時々あります。)
また、アドインの場合というか、マクロ経由では、.Visible プロパティは使いません。発つ鳥なんとかではありませんが、アドインをアンインストールする時には、相手側には何も残さないようにします。
On Error Resume Next
Application.CommandBars("○○○").Delete
です。
この回答への補足
丁寧なご指導ありがとう御座います。早速、試してみました。ワークシートに絵を貼り付ける方法として、ユーザー設定・ボタンイメージのコピー・ユーザー設定を閉じる・任意のセルを選択してショートカットメニューからペーストしました。
その後、ご指導の通り、PasteFaceで貼り付けると、なんと、絵が一回り小さくなってしまいます。また、透明表示されていた部分がグレーに着色されてしまいます。そこで、苦肉の浅知恵として、次のようなマクロを組んでみました。シートに貼り付けるのではなく、やはり、ブックに添付したコマンドバーを用意しておいて、コマンドバー間でクリップボードを介してコピーしてしまう方法です。結果は、上手く行きましたが、 御両者がご指摘している、肥大化の問題が残ります。何か?ご指摘頂ける点があれば、ご指導願えないでしょうか?
Sub Macro1()
Dim myCB元 As CommandBar
Dim myCB先 As CommandBar
Dim myCBCtrl As CommandBarControl
Set myCB元 = Application.CommandBars("コピー元のコマンドバー名")
Set myCB先 = Application.CommandBars("コピー先のコマンドバー名")
For i = 1 To ボタン数
myCB元.Controls(i).CopyFace
myCB先.Controls(i).PasteFace
Next
最後に、deleteする。
End Sub
VBのディストリビューション・ウィザードやEXEPress インストローラって何ですか?エクセルに標準で付いている機能ですか?それとも、VBを購入して、VB側からエクセルを操作する機能?ですか?重ね重ねご指導頂ければと思います。宜しくお願いいたします。
No.2
- 回答日時:
こんにちは。
Wendy02です。昨日の続きの話になるかと思いますが、参考になるアドイン・サンプルをアレンジしてみました。ただ、アドインをむやみに入れてしまいますと、レジストリを汚すことにもなりかねませんので、それは、ご自身で判断してください。
これは、大村あつし氏の『かんたんプログラミング Excel VBA 応用編』第6章を、私なりにアレンジしたものです。
ご質問では、設計の中で、ツールバーの登録の仕方が間違ったものだと思います。
以下のようにして、自分のツールバー(以下は、メニューバー)を、アドインで設定し、アドインで解除するように作るのが標準的です。たぶん、そのような作りになっていないのだと思います。ユーザーツールバーを作られて、それに設定を設けると、配布した後に、アドインをはずしても、そのツールバーが残るという厄介な現象が起こってしまいますので、出来るだけ、それはマナーとして行わないのがふつうです。
myCB.Controls.Add(Type:=msoControlPopup)
で、絵つきとなりますと、だいたい、既存のFaceID を使うのが一般的ですが、そうでない場合は、アドインファイル作成後ですと面倒ですが、PasteFace を使います。
また、配布の際は、WinArrow 氏の
"Excel^Addin Installer SP " が、便利ではないかと思います。
http://www.vector.co.jp/soft/win95/prog/se398317 …
私個人は、VBのディストリビューション・ウィザードやEXEPress インストローラを使ってしまいます。
'===============================================
'ThisWorkbook
'===============================================
Option Explicit
'------------------------------
'アドインインストール時に自動実行
'------------------------------
Private Sub Workbook_AddinInstall()
Dim myCB As CommandBar
Dim myCBCtrl As CommandBarControl, myCBCtrl2 As CommandBarControl
Set myCB = Application.CommandBars("Worksheet Menu Bar")
Set myCBCtrl = myCB.Controls.Add(Type:=msoControlPopup)
myCBCtrl.Caption = "アドイン"
With myCBCtrl.Controls.Add(Type:=msoControlButton)
.Caption = "マクロ1(&A)"
.OnAction = "myMacro1"
.FaceId = 351
End With
With myCBCtrl.Controls.Add(Type:=msoControlButton)
.Caption = "マクロ2(&B)"
.OnAction = "myMacro2"
.FaceId = 352
End With
With myCBCtrl.Controls.Add(Type:=msoControlButton)
.Caption = "アドインアンインストール(&Q)"
.OnAction = "AddinUnInst"
.FaceId = 342
End With
Set myCBCtrl = Nothing
Set myCB = Nothing
End Sub
'----------------------------------
'アドインアンインストール時に自動実行
'----------------------------------
Private Sub Workbook_AddinUninstall()
Call Auto_Remove
'Application.CommandBars("Worksheet Menu Bar").Reset
End Sub
'====================================================
'標準モジュール
'====================================================
Option Explicit
Sub myMacro1()
MsgBox "マクロ1を実行しました", vbExclamation
End Sub
Sub myMacro2()
MsgBox "マクロ2を実行しました", vbExclamation
End Sub
'-----------------------------
'アドインをアンインストールする
'-----------------------------
Sub AddinUnInst()
MsgBox "アドイン「MyAddin」を解除します"
AddIns("MyAddin").Installed = False
End Sub
'----------------------------------
'アドインアンインストール時に自動実行
'----------------------------------
Sub Auto_Remove()
Application.CommandBars("Worksheet Menu Bar").Reset
End Sub
この回答への補足
早速のご指導ありがとう御座います。
PasteFaceを使う時に、オリジナルで編集したFace(例えば、ニコちゃんマークを貼り付け、ユーザー設定のボタンイメージの編集で改変したFaceを自作したツールバーに貼り付ける方法ってあるのでしょうか?色々探しているもののなかなかいい手法が見つかりません。その結果、ブックに添付という手法になりました。このあたりを、もう少しご指導いただけると幸いに存じます。宜しくお願い致します。
No.1
- 回答日時:
こんにちは。
KenKen_SP です。> ツールバーにコマンド追加してマクロを登録しました。
ツールバーにマクロを割り当てると、ご自分の環境にあわせたリンク
が張られます。つまり、ご自分の Personal.xls にあるマクロを呼び
出そうとするのです。
例) Personal.xls!Macro1
Personal.xls は全ての PC にあるとは限りません。アドイン名で割り
当てる必要があります。
例) MyAddin.xla!Macro1
です。
ところで、アドインは「有効化・解除」が自由にできるものです。ここ
で問題となりそうなのは、
・「ツールバーの添付」という形でユーザーインターフェースを提供
した場合、アドインを解除してもツールバーが残ったままになる
です。アドインを解除した状態で、このツールバーのボタンをクリック
すると、また「アドインファイルが見つかりません」のようなアラート
が表示されてしまい、結局解決になりません。
そこで、通常アドインの場合には「アドインを有効にしたとき」に、VBA
でツールバーやメニューなどのインターフェースを動的に追加する方法
が用いられます。
もちろん、アドインを解除した場合には、追加したインターフェースは
削除するようにします。
ツールバーやメニューを操作するのは、なかなか厄介なのですが、その
手間を軽減できる素晴らしいサポートツールが在ります。
ご紹介しますので、お試し下さい。
【 Menu Generator 】
http://www.puremis.net/excel/soft/MenuGeneratorJ …
この回答への補足
早速のご指導、ありがとう御座います。
ご指示の通り、 MyAddin.xla!Macro1(当然、ファイル名はそれなりに変えています)とアドインファイル名を関連つけて保存し他のパソコンにアドインしましたが、やはり、人のパソコンにアドインするとPersonal.xls内で探してしまうようです。人のパソコンでユーザー設定を行い、アドインファイルに関連つけなおすと、この点については、もう少し自分なりに試行錯誤してから再度補足質問したいと思います。
当初、ご指摘のように、メニューバーを追加しようとしたのですが、コマンドのフェースが上手く改変できずにここで質問したところ、ブックに埋め込むこともできると教えて頂き現在に至っております。
アドインを解除する時には、Application.CommandBars("○○○").Visible = Falseとして非表示にしています。(Deleteで削除すればいいのかも?)
ユーザー設定のボタンイメージの編集を行なった結果を反映させるには、どうすればいいのでしょうか?重ね重ねご指導頂ければ幸いに存じます。
教えて頂いたソフトを早速使わせて頂きました。大変素晴らしいものです。本来は、作者に問い合わせるべき問題だと思いますが、文字が化けてしまいます。(いわゆるウルトラ文字みたいなの・・)それと、ファースを任意のドット絵にする方法ってあるのでしょうか?判る範囲で教えて頂ければ幸いに存じます。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) エクセルのマクロについて質問があります。 現在は下記のマクロでエクセル表を保存しています ThisW 2 2022/09/16 11:22
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで印刷する方法 エクセ...
-
【マクロ】宣言は、何のために...
-
エクセル終了時の保存確認メッ...
-
VBAを一度起動するとずっと出て...
-
昨日まで動いていたエクセルの...
-
excelファイルに使われているVB...
-
別のパソコンでエクセルのマク...
-
エクセル2013vbaで、見えない名...
-
EXCELで日付を自動でファイル名...
-
excelのマクロ実行でブロックさ...
-
エクセルをcsvにするやり方を教...
-
マクロを設定したのに、拡張子...
-
エクセルマクロが海外PCで開けない
-
コピーしたファイルのマクロを...
-
Excelマクロ ファイル名が変わ...
-
[エクセル]マクロを無効にした...
-
EXCEL マクロ クリップボードク...
-
マクロを消すマクロは不可能?
-
【マクロ】エラーが発生⇒実行時...
-
サクラエディタのマクロ設定を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】宣言は、何のために...
-
VBAを一度起動するとずっと出て...
-
エクセル終了時の保存確認メッ...
-
コピーしたファイルのマクロを...
-
excelファイルに使われているVB...
-
別のパソコンでエクセルのマク...
-
マクロを消すマクロは不可能?
-
Excelマクロ ファイル名が変わ...
-
VBA マクロ実行時エラー’1004Ra...
-
アクセスでファイルを開いたと...
-
昨日まで動いていたエクセルの...
-
EXCEL マクロ クリップボードク...
-
Excelが勝手にシート移動してし...
-
excelでpersonal.xlsを常に開く...
-
excelが別プロセスで起動してし...
-
エクセルマクロ実行中に別ファ...
-
【マクロ】エラーが発生⇒実行時...
-
マクロを設定したのに、拡張子...
-
外部データを取り込むマクロ
-
エクセルマクロが海外PCで開けない
おすすめ情報