dポイントプレゼントキャンペーン実施中!

マクロを作成して、人に配ろうかと考えています。ツールバーにコマンド追加してマクロを登録しました。ユーザー設定で、ツールバーの添付で保存(xls)して、別にアドインファイル(xla)で保存しました。別のパソコンにアドインすると、Personal.xlsにマクロが見つかりません。って出てきます。自分のパソコンにもどって、アドインし、コマンドを実行すると、元のxlsファイルが自動的に読み込まれて、実行できてしまいます。ユーザー設定を開きマクロの登録を見てみると、元のxlsファイルが関連付けられてしまっています。(因みに、マクロは、Private としています。
どうにか?アドインファイルだけで完結したいのですが、どのようにすればいいのでしょうか?教えてください。宜しくお願い致します。

A 回答 (6件)

> アドインファイルのシートって見ることが出来るのですか?



 アドインのシートは通常見えませんが、下記の手順で見ることが可能です。

 前提: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"やラベル表示が書き換えられています。が、適当にクリックすれば、使える状態です。一応、報告まで。(実用上、別に、いいかなぁ?って思っています。)ありがとう御座いました。
"ÒÆ­°–¼"の部分は、補足するをクリックすると別のものに置き替えられてしまってます。よって、今ご覧の文字は、違っています。(これも説明が悪いなぁ!!すみません)

補足日時:2006/07/07 16:07
    • good
    • 0

wan_wanさん, こんばんは。



KenKen_SPさん、お久しぶりです。(ちょっと、事情があって、ここを離れていました。)

>文字化けの件は、まだ解決していません。

それは、OSの文字の問題だと思います。私は、そのツールを使ってはいませんが、おそらく、Unicode と ANSIの問題で、解消はされないと思います。私の持っている日本語対応のあるツールでも、9x系は、文字化けしますが、2x系は、問題がありません。ですから、9x系では、諦めて英語にしています。
    • good
    • 0

> やはり、人のパソコンにアドインすると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に変更してみようと試みても駄目でした。(これが出来れば、アドインファイルの隠匿性がなくなるので元々出来ないようになっているのかも?)わかる範囲で教えて頂ければと存じます。宜しくお願い致します。
また、方向性としては、ご指導の通りにメニュー追加で進めます。大変ありがとう御座います。

補足日時:2006/07/07 10:21
    • good
    • 0

こんにちは。



>オリジナルで編集した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側からエクセルを操作する機能?ですか?重ね重ねご指導頂ければと思います。宜しくお願いいたします。

補足日時:2006/07/07 10:08
    • good
    • 0

こんにちは。

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を自作したツールバーに貼り付ける方法ってあるのでしょうか?色々探しているもののなかなかいい手法が見つかりません。その結果、ブックに添付という手法になりました。このあたりを、もう少しご指導いただけると幸いに存じます。宜しくお願い致します。

補足日時:2006/07/06 15:32
    • good
    • 0

こんにちは。

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で削除すればいいのかも?)
ユーザー設定のボタンイメージの編集を行なった結果を反映させるには、どうすればいいのでしょうか?重ね重ねご指導頂ければ幸いに存じます。

補足日時:2006/07/06 15:29
    • good
    • 0
この回答へのお礼

教えて頂いたソフトを早速使わせて頂きました。大変素晴らしいものです。本来は、作者に問い合わせるべき問題だと思いますが、文字が化けてしまいます。(いわゆるウルトラ文字みたいなの・・)それと、ファースを任意のドット絵にする方法ってあるのでしょうか?判る範囲で教えて頂ければ幸いに存じます。宜しくお願い致します。

お礼日時:2006/07/06 16:09

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