- ベストアンサー
エクセルで個人用マクロの配布方法
このたびわたしが作成した業務用の簡単なマクロを社内の他部門(遠隔地)の10名ほどのかたがたにメールで配布して使っていただくことになりました。 自分では個人用マクロブックに登録し、任意のエクセルのシートに対して使用していたものです。 一応そのマクロだけをエクスポートしてModule1.basというファイルは作ったのですが、これまでマクロそのものを配布したことがないので送った先の人にどうインポート方法を説明したらよいのかわかりません。多分マクロはよく知らないひとたちのはずです。 いい説明方法があれば教えてください。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
> 成功しました!!他の端末へのインストールも出来ました。 おお!それは、よかった!(^^) > 再度送付してあげれば相手のアドインは上書きされると思ってよい > のでしょうか? ええ、最初から修正やバージョンアップはあるものとして、考慮して ましたから、その手順で大丈夫ですよ。 それでは、さらに一歩進んで、、 アドイン化したものは、どんな時に実行されるか保証されないので、 注意が必要です。つまり、ActiveSheet がない状態でメニューを クリックすることも、あり得るってことです。この場合、エラーの 発生が予想されますね。 エラーが発生して、「デバッグしますか?」と聞かれたり、デバッグ モードの VBE 画面がでてきたら、初心者の方はビックリしてしまう でしょう。 ですから、コードの冒頭でそれをトラップしてやらなければなりま せんし、VBA プロジェクトも保護しておいた方が良いでしょう。 VBA プロジェクトの保護は、VBE のプロジェクトエクスプローラーで MyADDIN を選択し、右クリック[VBA プロジェクトのプロパティー] から行います。 トラップの方法は、例えば Selection ならセル以外が選択されて いてはマズイ場合、 IF Ucase$(Typename(Selection))<>"RANGE" Then Exit Sub のようにコードの冒頭に書き込みます。On Error ~ ステートメント も必要があれば使います。 関数もワークシート関数として使われたくない場合は Private Function にしてしまうか、次のように Caller を使ってトラップします。 Function Test(A As Variant) As String ' ワークシート関数として使えないようにする If UCase$(TypeName(Application.Caller)) = "RANGE" Then Exit Function End If '~ 処理 ~ End Function こうすると、VBA からしか使えない関数になります。 この辺は、場数を積めば勘処が養えるので、無理に今全部やる必要は ありません。エラーが発生したときに困ったら、読み返してみて下さい。 以下は、余談です。 ・プロシージャ Count_Net の x = ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Count).Row は x = rngTarget(rngTarget.Count).Row の方が良いと思います。 ・プロシージャ Del_Sqt について これは、前回のご質問のやつですよね。そちらに手が回らず、済みません。 アドイン化、、大変だったと思いますが、いろいろやってみて下さい。 自分にとって都合がよく便利で、自分だけのツールが作れますよ。 では、頑張って下さい。 あ、慣れてきたら、アドインの名前はもっとセンスのいいヤツに変えて 下さいね。MyADDIN って適当につけたヤツなので(^^;)
その他の回答 (12)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 4)A4セルに 2、B4セルに セルの引用符を削除 、C3セルに Del_Sqt > と入力します は C4 セルに Del_Sqt の誤りです。#11 4-9)で説明したとおり、テストメニュー を見て、誤りがあれば、そこで修正して下さい。 > テスクトップ上の[ ADDIN ]フォルダ内にある MyADDIN.xla を削除すれば、 > メニューのmerlionXXも消えるのでしょうか? ・アドインを解除すれば、メニューは自動的に消えます。 メニュー merlionXX は、アドインが開かれたときに作成されるものです。 当然、MyADDIN.xla が見つからない場合は、メニューはありません。 ただし、そのアドインを有効にしているなら、「アドインが見つからない」 とアラートが表示されます。 アドインは 「ワークシートが表示されない」特殊なブックの一種です。 XLSTART に PERSONAL.XLS を入れたのと同様に、Excel が起動したときに アドインフォルダ内にあり、かつ、アドインが有効に設定されているものは 同時に開かれます。違いは、 Excel メニュー[ツール]-[アドイン] で、ユーザーが好きなときにアドインの有効・解除の操作を行えること ですね。XLSTART のようなファイル操作は必要ないのです。 必要がなけれな、アドインを解除しておけば良いのです。 ・アドインそのものを削除する 削除方法は、「アドインが有効 = アドインが開かれた状態」では不可能 ですから、先にアドインを解除します。 あとは、通常のファイルと同様に、削除して下さい。 アドイン(*.xla)を削除すると、Excel メニュー[ツール]-[アドイン]を 再び開くと、アドインリストもアラートがでて、自動的に修正されます。
お礼
成功しました!!他の端末へのインストールも出来ました。本当にありがとうございます。 これが最後の追加質問です。 もしMyADDIN.xlaの中身に修正やあたらしいマクロの追加があった場合、修正&追加後のモジュールシートで再度MyADDIN.xlaを作成し、MenuGenerataorで同様の作業をし、再度送付してあげれば相手のアドインは上書きされると思ってよいのでしょうか?
- KenKen_SP
- ベストアンサー率62% (785/1258)
手順を具体的に書きましたので、一度このとおりに作業してみて下さい。 【手順】--------------------------------------------------------------- 1. ご自分の作成されたマクロ(Module)を含む Excel ブックを作成します 2. 1. を[名前をつけて保存]コマンドで次の設定で保存 ・形式: マイクロソフト アドイン(*.xla) ・名前: 下記のコード冒頭の cnsXLA_NAME と一致させて下さい(任意) ここでは、MyADDIN.xla で話を進めます ・場所: デスクトップに [ ADDIN ]フォルダを作りましょう ここに保存します 3. 2. で作成したアドインを有効にして下さい [ツール]-[アドイン]-[参照] でテスクトップ上の[ ADDIN ]フォルダ内に ある MyADDIN.xla を選択して[ OK ]をクリックします 4. MenuGenerator.xls を開き、メニューを作成します ここで、ユーザーインターフェースを作成します。取り合えず、次の様に 作業してみて下さい。 1)MenuGenerator.xls の 3 行目以下のサンプルデータを消去します。 2)A2セルに 1、B2セルに merlionXX と入力します 3)A3セルに 2、B3セルに 重複を除いてカウント 、C3セルに Count_Net と入力します 4)A4セルに 2、B4セルに セルの引用符を削除 、C3セルに Del_Sqt と入力します 5)Excel 画面に MenuGenerator.xls のツールバーが表示されています 一番左側の「メニュー作成ウィザード起動」をクリックします 6)画面の支持に従い、「メニュー作成ウィザード3/5」まで進めます 7)「メニュー作成ウィザード3/5」では、メニューを表示させる位置を 決めます。取り合えず、「ワークシートメニューバー」を選択します 8)[ はい ] をクリック 9)[ メニュー作成のテスト] をクリックします ここで、Excel メニューバーに 新しいメニューが追加されます。 間違えていたら、[ 作成したメニューを削除 ]をクリックし、フォーム が閉じないで、そのままワークシート上のデータを修正し、再度確認 します OK なら、[ 作成したメニューを削除 ]をクリックして、ウィザードを 進めて下さい 10) 次に以上で作成したメニューを追加するアドインを選択します。 MyADDIN.xla を選択し、[ はい ] をクリック 以上で、MyADDIN.xla にメニュー追加のコードが書き込まれます。 Excel を再起動してみて、メニューが表示されるか確認して下さい 確認できたら、Excel を終了します。 5. テスクトップ上の[ ADDIN ]フォルダ内にある MyADDIN.xla の拡張子を 手動で削除します 6. MyADDIN、Install.xls と解説文などを一緒に圧縮して配布 Install.xls を開くだけで、アドインをインストールできます。 -----------------------------------------------------------------------
お礼
何度もありがとうございます。 手順どおりやったつもりなのですが・・・・。 メニュー上にmerlionXXが表示されました。 クリックすると「重複を除いてカウント」のみが現れ、クリックすると Count_Netがはじまります。 Del_Sqtが見当たりません。(゜〇゜;)?
補足
テスクトップ上の[ ADDIN ]フォルダ内にあるMyADDIN.xla を削除すれば、メニューのmerlionXXも消えるのでしょうか?
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 1.MenuGeneratorがないとアドインは使えないのですか? いえ、違います。MenuGenerator は自作されたアドインにメニュー追加のコード を書き足してくれるツールに過ぎません。 Excel で自作メニューを VBA でつくるのは、結構面倒なんですよ。それで、この ツールで簡単にそのコードを作ってしまおう、、ということです。 これが追加されたら、MenuGenerator は以後不要になります。同封して配布する 必要はありません。 > 2.今入れたこのアドインを削除するにはどうしたらいいでしょうか? C:\Documents and Settings\ユーザー名\Application Data\Microsoft\AddIns OS が 2000、XP ならここです。アドインが有効のままだと、ファイル削除 できないので、Excel を終了させた状態で作業を行って下さい。 アドイン について、WEB で調べてみて下さい。 http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html 大丈夫ですよ。ちゃんと、できるまでサポートします。 merlionXX さんのご質問は、興味深いものばかりです。回答を考える過程で私も 大変勉強になってます。
お礼
ありがとうございます、お手数をおかけします。 詳しくは補足に書かせていただきました。 Sub Count_Net() Sub Del_Sqt() Function hmsg() の3つを記入したアドインですが、MenuGeneratorにはどう入れればいいのかわからないのです。すみません。
補足
会社のエクセル2000で、ANo.9の手順3まで行いました。 4.でつまづいています。 メニューのデータとは何を入れればよいのでしょうか? わたしのアドインは以下の通りです。 Sub Count_Net() Set rngTarget = Intersect(Selection, ActiveSheet.UsedRange) If rngTarget Is Nothing Then MsgBox "対象が見当たらないよ~。" _ + Chr(&HD) + Chr(&HA) + "", vbCritical, " ( ̄□ ̄;)!!" Exit Sub End If Rtn = MsgBox(hmsg & "" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "選択された、" & rngTarget.Address & "の範囲を対象とします。" _ + Chr(&HD) + Chr(&HA) + "範囲が離れていたり、途中に空白行があると計算できません。" _ + Chr(&HD) + Chr(&HA) + "よろしいですね?", vbYesNo + vbQuestion, " ( ̄∇ ̄; ?") If Rtn = vbNo Then Exit Sub If Selection.Areas.Count > 1 Then MsgBox "選択範囲が分離してるよ~。" _ + Chr(&HD) + Chr(&HA) + "", vbCritical, " ( ̄□ ̄;)!!" Exit Sub End If With rngTarget fr = .Cells(1).Row lr = .Cells(.Count).Row fc = .Cells(1).Column lc = .Cells(.Count).Column End With x = ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Count).Row r1 = fr - x - 1 r2 = lr - x - 1 For c = fc To lc ActiveSheet.Cells(x + 1, c) = _ "=SUMPRODUCT(1/COUNTIF(R[" & r1 & "]C:R[" & r2 & "]C,R[" & r1 & "]C:R[" & r2 & "]C))" Next MsgBox "最終行にカウントしました。" _ + Chr(&HD) + Chr(&HA) + "", , " ( ̄ー ̄)v " End Sub Sub Del_Sqt() Dim rngTarget As Range Dim Buffer As Variant Dim lngRowCnt As Long Dim lngColCnt As Long Dim i As Long, j As Long Set rngTarget = Intersect(Selection, ActiveSheet.UsedRange) If rngTarget Is Nothing Then MsgBox "対象が見当たらないよ~。" _ + Chr(&HD) + Chr(&HA) + "", vbCritical, " ( ̄□ ̄;)!!" Exit Sub End If rngTarget.NumberFormatLocal = "@" Buffer = rngTarget.Value lngRowCnt = UBound(Buffer) lngColCnt = UBound(Buffer, 2) Rtn = MsgBox(hmsg & "" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "選択された、" & rngTarget.Address & "の範囲を対象とします。" _ + Chr(&HD) + Chr(&HA) + "選択範囲が分離していると作動しません。" _ + Chr(&HD) + Chr(&HA) + "よろしいですね?", vbYesNo + vbQuestion, " ( ̄∇ ̄; ?") If Rtn = vbNo Then Exit Sub If Selection.Areas.Count > 1 Then MsgBox "選択範囲が分離してるよ~。" _ + Chr(&HD) + Chr(&HA) + "", vbCritical, " ( ̄□ ̄;)!!" Exit Sub End If For i = 1 To lngRowCnt For j = 1 To lngColCnt Buffer(i, j) = Trim(Buffer(i, j)) Next j Next i rngTarget.Value = Buffer Set rngTarget = Nothing End Sub Function hmsg() Dim h As Integer h = Hour(Time) Select Case h Case Is < 12: hmsg = "おはようございます。" Case Is < 17: hmsg = "こんにちは。" Case Else: hmsg = "こんばんは。" End Select End Function
- KenKen_SP
- ベストアンサー率62% (785/1258)
#7 のコードにバグがありました。あと、PC の処理速度の問題だと思うの ですが、Addins.Add に失敗する場合がありましたので、Sleep でウェイト を挟んだ他、細かな修正をしてます。 Install.xls のコード全体を差し替えて下さい。 > どうやって組み込んだアドインのマクロを使うのでしょうか? アドインの場合は、メニューとかフォームのインターフェースを作らないと いけないんですね、、、忘れてましたm(_ _)m これをお試し下さい。 http://www.puremis.net/excel/soft/MenuGeneratorJ.shtml アドインのメニュー作成支援ツールで、非常に便利です。 上記 URL の下の方で ダウンロード できます。 このツールは、動的にメニューを作成するコード(Module_Menu)をアドイン に追加してくれます。 ダウンロードが完了したら、MenuGenerator.xls を解凍して準備して下さい。 手順を再掲します。 【手順】--------------------------------------------------------------- 1. ご自分の作成されたマクロ(Module)を含む Excel ブックを作成します 2. 1. を[名前をつけて保存]コマンドで次の設定で保存 ・名前: 下記のコード冒頭の cnsXLA_NAME と一致させて下さい(任意) ・形式: マイクロソフト アドイン(*.xla) 3. 2. で作成したアドインを有効にして下さい [ツール]-[アドイン]-[参照] で保存した場所を指定します 4. MenuGenerator.xls を開き、メニューのデータを入力します。 5. MenuGenerator.xls のツールバーでメニュー作成ウィザードをクリック -->途中でメニューのプレビューができますので、いろいろ試してみて 下さい 6. ウィザードの通り進めて、完了させて下さい 7. 出来上がったアドインは、下記のいずれかの場所にあります。コピーして、 デスクトップなど分かり易い場所に置いてから、拡張子を手動で削除します。 アドインの場所:2. で保存した場所か、または、 C:\Documents and Settings\ユーザー名\Application Data\Microsoft\AddIns 8. あとは、Install.xls と 7. のファイルを一緒に圧縮して配布です ----------------------------------------------------------------------- 以下 #7 の差し替えコードです。 '--------------------------------------------------------------------------------------- ' Purpose : アドイン簡易インストーラー '--------------------------------------------------------------------------------------- Option Explicit ' 設定:アドイン名-------------------------------------------------------- ' 拡張子不要で Install.xls と同一フォルダにアドインをおいておく Private Const cnsXLA_NAME = "MyADDIN" '------------------------------------------------------------------------- Private Declare Sub Sleep Lib "kernel32.dll" ( _ ByVal dwMilliseconds As Long) Sub Auto_Open() If XLA_INSTALL() Then ' 成功時のメッセージ MsgBox "インストールは成功しました. Excel を再起動して下さい." & vbLf & vbLf _ & "なお、このインストール用ブックは削除して構いません.", vbInformation Else ' 失敗時のメッセージ MsgBox "インストールは失敗しました." & vbLf & vbLf _ & "考えられる理由: ファイル " & cnsXLA_NAME _ & " が同じフォルダ無い", vbCritical End If ' インストール用ブックを閉じる ThisWorkbook.Close SaveChanges:=False End Sub Private Function XLA_INSTALL() As Boolean Dim strDestination As String Dim strSource As String Application.DisplayAlerts = False ' コピー元のファイル名を生成し、存在確認する strSource = ThisWorkbook.Path & "\" & cnsXLA_NAME If Dir(strSource) <> "" Then ' アドイン差し替えのため、既に開いていれば上書きのため閉じる On Error Resume Next With Application.AddIns(cnsXLA_NAME) If .Installed Then .Installed = False Sleep 2000 End With On Error GoTo 0 ' 拡張子を付与してユーザーアドインフォルダへコピー strDestination = Application.UserLibraryPath & cnsXLA_NAME & ".xla" FileCopy Source:=strSource, Destination:=strDestination ' コピーできたか確認 If Dir(strDestination) <> "" Then ' アドインリストに追加し、有効化 Application.AddIns.Add Filename:=strDestination Application.AddIns(cnsXLA_NAME).Installed = True ' Kill strSource '<-- ココ 削除するかは好みで XLA_INSTALL = True End If End If On Error GoTo 0 Application.DisplayAlerts = True End Function
お礼
すみません。 いま、新しい手順の説明を読まずに、#7 の差し替えコードに変えただけで自宅のPC(WindousXP、エクセル2003)にアドインを入れてしまいました。つまりMenuGeneratorは何も準備していませんでした。 「インストールは成功しました」と出ました。 1.MenuGeneratorがないとアドインは使えないのですか? 2.今入れたこのアドインを削除するにはどうしたらいいでしょうか? 何もわからなくてご迷惑をおかけします。すみません。
- KenKen_SP
- ベストアンサー率62% (785/1258)
> インストーラなんてどうやって作ったらいいのか見当もつきません 自作ではなく、Vector などで探せます。有名どこでフリーだと、EXEpress とか。 http://www.vector.co.jp/vpack/filearea/win95/prog/install/index.html このようなインストーラーや自己解凍書庫作成機能のあるアーカイバーは、 実行時または書庫解凍時にファイルを実行する、インストール先を指定する機能 をもっています。それを使って、 ・インストーラーなら、アドインフォルダへ直接コピー ・自己解凍書庫ならアドインフォルダへ Bat(VBS)ファイルを使ってコピー なんてことができます。 Excel VBA プログラムでもインストーラーを使っているものは、たまに見かけ ますよ。
- KenKen_SP
- ベストアンサー率62% (785/1258)
お待たせしました。 【手順】--------------------------------------------------------------- 1. ご自分の作成されたマクロ(Module)を含む Excel ブックを作成します 2. 1. を[名前をつけて保存]コマンドで次の設定で保存 ・名前: 下記のコード冒頭の cnsXLA_NAME と一致させて下さい ・形式: マイクロソフト アドイン(*.xla) 3. 2. で保存されたアドインの拡張子を手動で削除します。 例)MyADDIN.xla --> MyADDIN これは、ユーザーが不意にこのファイルを開いて混乱しないように するためです。拡張子をカットしてしまえば、ダブルクリックでは 開けませんので。 4. 新規ブックを作成し、下記のコードを標準モジュールにコピペ -->この時、cnsXLA_NAME を 3. の名前に変更します。例)MyADDIN 5. 4. を Install.xls とでも分かり易い名前で保存 ----------------------------------------------------------------------- 以上です。 > 一人ずつ電話して個人用マクロブックを作ってもらい、コピペさせます。 アドイン化でも個人用マクロブックでも同じですが、他人に使ってもらう場合は、 コードも注意して下さいね。例えば、 Range("A1").Value = 1000 とか。これは、Activesheet が保証されてないと、意図通り動かないコードです。 つまり、自分はわかっているけど、他人の場合、 「どのシートをアクティブにして、マクロを実行するか”わからない”」 ってことです。 ちゃんとシート名とかブック名とか、、、オブジェクトを明示したコードにして 下さいね。 アドイン化は別に難しくはないですよ。頑張って。 では、健闘を祈ります。 '------------------------------------------------------------------------- ' Purpose : アドイン簡易インストーラー '------------------------------------------------------------------------- Option Explicit ' 設定:アドイン名-------------------------------------------------------- ' 拡張子不要で Install.xls と同一フォルダにアドインをおいておく Private Const cnsXLA_NAME = "MyADDIN" '------------------------------------------------------------------------- Sub Auto_Open() If XLA_INSTALL() Then ' 成功時のメッセージ MsgBox "インストールは成功しました." & vbLf & vbLf _ & "なお、このインストール用ブックは削除して構いません.", vbInformation Else ' 失敗時のメッセージ MsgBox "インストールは失敗しました." & vbLf & vbLf _ & "考えられる理由: ファイル " & cnsXLA_NAME _ & " が同じフォルダ無い", vbCritical End If ' インストール用ブックを閉じる ThisWorkbook.Close SaveChanges:=False End Sub Private Function XLA_INSTALL() As Boolean Dim strDestination As String Dim strSource As String On Error Resume Next Application.DisplayAlerts = False ' コピー元のファイル名を生成し、存在確認する strSource = ThisWorkbook.Path & "\" & cnsXLA_NAME If Dir(strSource) <> "" Then ' アドイン差し替えのため、既に開いていれば上書きのため閉じる With Application.AddIns(cnsXLA_NAME) If .Installed Then .Installed = False End With ' 拡張子を付与してユーザーアドインフォルダへコピー strDestination = Application.UserLibraryPath & "\" & cnsXLA_NAME & ".xla" FileCopy Source:=strSource, Destination:=strDestination ' コピーできたか確認 If Dir(strDestination) <> "" Then ' アドインリストに追加し、有効化 With Application.AddIns(cnsXLA_NAME) If Not .Installed Then Application.AddIns.Add Filename:=strDestination .Installed = True End If End With ' コピーできたので元のファイルは削除 Kill strSource ' Return XLA_INSTALL = True End If End If On Error GoTo 0 Application.DisplayAlerts = True End Function
お礼
ご親切にありがとうございます。 なにもわからないままにさっそく上記手順をやってみました。 手順1では作成したMyADDIN.xlaのモジュールには二つのSubと1つのFunctionがあります。 「インストールは成功しました」とメッセージがでました。 でも、それから先はどうなるのでしょうか? どうやってマクロを使うのでしょうか?ツール、マクロ、マクロでも出てきません。 メニューバーにも何も増えた気配はありません。どうやって組み込んだアドインのマクロを使うのでしょうか?
- KenKen_SP
- ベストアンサー率62% (785/1258)
サンプル書きますね。少しお待ち下さい。 とか言いながら結構待たせてしまうかもしれないので、待ちきれない なら締め切って下さっても構いません。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 話の腰を折って申し訳ありませんが、、、 VBE を操作する方法は止めた方が良いですよ。特に Excel 2002 以降では、 セキュリティー強化でディフォルトの状態では VBA プロジェクトにアクセス できませんから。 結局、VBA プロジェクトへのアクセスを許可する設定方法を説明するはめに なります。 PERSONAL.XLS を操作するのも止めた方が良いですね。既に VBA を使っている 人がいるかもしれないから、それを上書きするようなことはマズイです。 また、*.xls の形式だとワークシートが表示されてしまいますので、不要な 混乱を招きそうです。 で私見ですが、アドイン化(*.xla)して、 ・起動フォルダ(XLStart) --> Application.StartupPath ・アドインフォルダ(Library)--> Application.LibraryPath のいずれかにコピーして提供した方がよいと思います。できれば、アドイン フォルダがベストですね。 保存する場所さえわかれば、ファイルコピーは VBA でそれほど難しくはない でしょう? FileCopy ステートメントとか、FileSystemObject とか。WEB でサンプルは探せます。 アドインフォルダへインストールした場合は、アドインを有効にする操作は、 ユーザーに任せましょう。 一般的な操作ですから、画像付きで説明すれば難しくはありませんし、 元々「アドインを使用する・しない」については、ユーザーに決定を任せる べき事項だからです。 他には、、インストーラーを作ってしまうとか、解凍先を指定できるアーカイ バーで自己解凍書庫にするとか、Bat ファイル(VBS)でコピーするとか、、 いろいろ手はあります。
お礼
おせわになります。 全員エクセル2000ですからVBAプロジェクトへのアクセスを許可する設定方法は今回はいいのですが、ぜんぜん実力もないのに自動で個人用マクロをインポートしようなどと思ったのは10年早いようです。 アドインだって使ったことも無いし、インストーラなんてどうやって作ったらいいのか見当もつきません。(そんなこと出来たらいいなあ) 幸い10人程度ですから、今回はマクロはメール本文で送り、あとは一人ずつ電話して個人用マクロブックを作ってもらい、コピペさせます。 ぐすん
- X-trail_00
- ベストアンサー率30% (438/1430)
#2,3です >最初のApplication ~~ "DONYU"はプロジェクト名? VBEの画面でツリー形式でシートとかモジュールかかれているプロジェクトエクスプローラで MicrosoftExcelObjectsを右クリックでプロパティ見て確認 >もう一点、うまく行った場合、相手のPCにすでにpersonal.xls 先に存在確認する。あれば新規作成を止めてモジュールを入れるだけにする モジュール名のダブリにも注意。
お礼
> "DONYU"はプロジェクト名? このマクロを書いたブックの名前ですDONYU.XLSです。 > MicrosoftExcelObjectsを右クリックでプロパティ見て確認 ただのVBProjectでした。 Application.VBE.VBProject.VBComponents("Module1").Export ("C:\Module1.bas")としても同じ実行時エラーでした。
- X-trail_00
- ベストアンサー率30% (438/1430)
#2です >よって1と2の合作 以降がその方法だったのですが 'モジュールファイルを削除する Application.VBE.ActiveVBProject.VBComponents.Remove Application.VBE.ActiveVBProject.VBComponents("Module1") 'モジュールをエクスポートする。 Application.VBE.VBProjects("test").VBComponents("Module1").Export ("C:\Module1.bas") 'エクスポートされたモジュールをインポートする。 Application.VBE.ActiveVBProject.VBComponents.Import ("C:\Module1.bas") 上記が少し助けになれば。 また#1さんの答えの下記URLもヒントになります。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060206/228642/ 私自身も業務で必要に迫られてネットを調べて作ったので 質問者さんも自分のしたいことに合わせて検索して覚えるのも 勉強です。 必ず自分の実力になります。 ヒント 送るブックのマクロ 新しいワークブック作成 置く場所は個人用マクロ保管場所 ファイル名は personal.xls 送るブックに予めmodule1を入れておく それをエクスポートして 新しく作成したファイルにインポート 新しく作成したファイル保存 全部閉じる。 と言った流れでしょうか
お礼
ありがとうございます。 ヒントを参考に下記のように作ってみましたが、最初のApplication.VBE.VBProject("DONYU").のところで「実行時エラー438、オブジェクトはこのプロパティまたはメソッドをサポートしていません」となってしまいます。WINDOWS2000、エクセル2000です。 もう一点、うまく行った場合、相手のPCにすでにpersonal.xlsが存在していたらどうなるのでしょうか? Sub donyu() uz = InputBox("あなたのユーザー名を入力してください。") Application.VBE.VBProject("DONYU").VBComponents("Module1").Export ("C:\Module1.bas") Set wb = Workbook.Add wb.SaveAs Filename:= _ "C:\Documents and Settings\" & uz & "\Application Data\Microsoft\Excel\XLSTART\PERSONAL.xls" Application.VBE.VBProject("PERSONAL").VBComponents.Import ("C:\Module1.bas") wb.Close Set wb = Nothing ThisWorkbook.Close (False) End Sub
- 1
- 2
お礼
最後の最後までご親切にありがとうございました。 KenKenSPさまがいらっしゃらなかったら、わたしにはアドインなんて遥か彼方の高嶺の花でした。 手取り足取りお教えを賜り感謝感激です。 No13でのご指摘を踏まえて再度コードを見直したいと思います。 ありがとうございました。