アプリ版:「スタンプのみでお礼する」機能のリリースについて

このたびわたしが作成した業務用の簡単なマクロを社内の他部門(遠隔地)の10名ほどのかたがたにメールで配布して使っていただくことになりました。

自分では個人用マクロブックに登録し、任意のエクセルのシートに対して使用していたものです。
一応そのマクロだけをエクスポートしてModule1.basというファイルは作ったのですが、これまでマクロそのものを配布したことがないので送った先の人にどうインポート方法を説明したらよいのかわかりません。多分マクロはよく知らないひとたちのはずです。
いい説明方法があれば教えてください。

A 回答 (13件中1~10件)

> 成功しました!!他の端末へのインストールも出来ました。



おお!それは、よかった!(^^)

> 再度送付してあげれば相手のアドインは上書きされると思ってよい
> のでしょうか?

ええ、最初から修正やバージョンアップはあるものとして、考慮して
ましたから、その手順で大丈夫ですよ。

それでは、さらに一歩進んで、、

アドイン化したものは、どんな時に実行されるか保証されないので、
注意が必要です。つまり、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 って適当につけたヤツなので(^^;)
    • good
    • 4
この回答へのお礼

最後の最後までご親切にありがとうございました。
KenKenSPさまがいらっしゃらなかったら、わたしにはアドインなんて遥か彼方の高嶺の花でした。
手取り足取りお教えを賜り感謝感激です。
No13でのご指摘を踏まえて再度コードを見直したいと思います。
ありがとうございました。

お礼日時:2006/06/26 17:19

>  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 メニュー[ツール]-[アドイン]を
  再び開くと、アドインリストもアラートがでて、自動的に修正されます。
    • good
    • 0
この回答へのお礼

成功しました!!他の端末へのインストールも出来ました。本当にありがとうございます。

これが最後の追加質問です。
もしMyADDIN.xlaの中身に修正やあたらしいマクロの追加があった場合、修正&追加後のモジュールシートで再度MyADDIN.xlaを作成し、MenuGenerataorで同様の作業をし、再度送付してあげれば相手のアドインは上書きされると思ってよいのでしょうか?

お礼日時:2006/06/26 15:18

手順を具体的に書きましたので、一度このとおりに作業してみて下さい。




【手順】---------------------------------------------------------------
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 を開くだけで、アドインをインストールできます。

-----------------------------------------------------------------------

この回答への補足

テスクトップ上の[ ADDIN ]フォルダ内にあるMyADDIN.xla を削除すれば、メニューのmerlionXXも消えるのでしょうか?

補足日時:2006/06/26 13:38
    • good
    • 1
この回答へのお礼

何度もありがとうございます。
手順どおりやったつもりなのですが・・・・。

メニュー上にmerlionXXが表示されました。
クリックすると「重複を除いてカウント」のみが現れ、クリックすると
Count_Netがはじまります。
Del_Sqtが見当たりません。(゜〇゜;)?

お礼日時:2006/06/26 13:37

> 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/471fu …

大丈夫ですよ。ちゃんと、できるまでサポートします。

merlionXX さんのご質問は、興味深いものばかりです。回答を考える過程で私も
大変勉強になってます。

この回答への補足

会社のエクセル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

補足日時:2006/06/26 10:20
    • good
    • 0
この回答へのお礼

ありがとうございます、お手数をおかけします。
詳しくは補足に書かせていただきました。

Sub Count_Net()
Sub Del_Sqt()
Function hmsg()
の3つを記入したアドインですが、MenuGeneratorにはどう入れればいいのかわからないのです。すみません。

お礼日時:2006/06/26 10:25

#7 のコードにバグがありました。

あと、PC の処理速度の問題だと思うの
ですが、Addins.Add に失敗する場合がありましたので、Sleep でウェイト
を挟んだ他、細かな修正をしてます。

Install.xls のコード全体を差し替えて下さい。


> どうやって組み込んだアドインのマクロを使うのでしょうか?

アドインの場合は、メニューとかフォームのインターフェースを作らないと
いけないんですね、、、忘れてましたm(_ _)m

これをお試し下さい。

http://www.puremis.net/excel/soft/MenuGeneratorJ …

アドインのメニュー作成支援ツールで、非常に便利です。
上記 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
    • good
    • 0
この回答へのお礼

すみません。
いま、新しい手順の説明を読まずに、#7 の差し替えコードに変えただけで自宅のPC(WindousXP、エクセル2003)にアドインを入れてしまいました。つまりMenuGeneratorは何も準備していませんでした。
「インストールは成功しました」と出ました。

1.MenuGeneratorがないとアドインは使えないのですか?
2.今入れたこのアドインを削除するにはどうしたらいいでしょうか?

何もわからなくてご迷惑をおかけします。すみません。

お礼日時:2006/06/24 16:20

> インストーラなんてどうやって作ったらいいのか見当もつきません



自作ではなく、Vector などで探せます。有名どこでフリーだと、EXEpress とか。
http://www.vector.co.jp/vpack/filearea/win95/pro …

このようなインストーラーや自己解凍書庫作成機能のあるアーカイバーは、
実行時または書庫解凍時にファイルを実行する、インストール先を指定する機能
をもっています。それを使って、

 ・インストーラーなら、アドインフォルダへ直接コピー
 ・自己解凍書庫ならアドインフォルダへ Bat(VBS)ファイルを使ってコピー

なんてことができます。

Excel VBA プログラムでもインストーラーを使っているものは、たまに見かけ
ますよ。
    • good
    • 0

お待たせしました。



【手順】---------------------------------------------------------------
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
    • good
    • 0
この回答へのお礼

ご親切にありがとうございます。
なにもわからないままにさっそく上記手順をやってみました。

手順1では作成したMyADDIN.xlaのモジュールには二つのSubと1つのFunctionがあります。

「インストールは成功しました」とメッセージがでました。

でも、それから先はどうなるのでしょうか?
どうやってマクロを使うのでしょうか?ツール、マクロ、マクロでも出てきません。
メニューバーにも何も増えた気配はありません。どうやって組み込んだアドインのマクロを使うのでしょうか?

お礼日時:2006/06/23 18:15

サンプル書きますね。

少しお待ち下さい。

とか言いながら結構待たせてしまうかもしれないので、待ちきれない
なら締め切って下さっても構いません。
    • good
    • 1

こんにちは。

KenKen_SP です。

話の腰を折って申し訳ありませんが、、、

VBE を操作する方法は止めた方が良いですよ。特に Excel 2002 以降では、
セキュリティー強化でディフォルトの状態では VBA プロジェクトにアクセス
できませんから。

結局、VBA プロジェクトへのアクセスを許可する設定方法を説明するはめに
なります。

PERSONAL.XLS を操作するのも止めた方が良いですね。既に VBA を使っている
人がいるかもしれないから、それを上書きするようなことはマズイです。

また、*.xls の形式だとワークシートが表示されてしまいますので、不要な
混乱を招きそうです。

で私見ですが、アドイン化(*.xla)して、

・起動フォルダ(XLStart)   --> Application.StartupPath
・アドインフォルダ(Library)--> Application.LibraryPath

のいずれかにコピーして提供した方がよいと思います。できれば、アドイン
フォルダがベストですね。

保存する場所さえわかれば、ファイルコピーは VBA でそれほど難しくはない
でしょう?

FileCopy ステートメントとか、FileSystemObject とか。WEB でサンプルは探せます。

アドインフォルダへインストールした場合は、アドインを有効にする操作は、
ユーザーに任せましょう。

一般的な操作ですから、画像付きで説明すれば難しくはありませんし、
元々「アドインを使用する・しない」については、ユーザーに決定を任せる
べき事項だからです。

他には、、インストーラーを作ってしまうとか、解凍先を指定できるアーカイ
バーで自己解凍書庫にするとか、Bat ファイル(VBS)でコピーするとか、、

いろいろ手はあります。
    • good
    • 0
この回答へのお礼

おせわになります。
全員エクセル2000ですからVBAプロジェクトへのアクセスを許可する設定方法は今回はいいのですが、ぜんぜん実力もないのに自動で個人用マクロをインポートしようなどと思ったのは10年早いようです。

アドインだって使ったことも無いし、インストーラなんてどうやって作ったらいいのか見当もつきません。(そんなこと出来たらいいなあ)
幸い10人程度ですから、今回はマクロはメール本文で送り、あとは一人ずつ電話して個人用マクロブックを作ってもらい、コピペさせます。
ぐすん

お礼日時:2006/06/23 14:29

#2,3です



>最初のApplication ~~
"DONYU"はプロジェクト名?
VBEの画面でツリー形式でシートとかモジュールかかれているプロジェクトエクスプローラで
MicrosoftExcelObjectsを右クリックでプロパティ見て確認

>もう一点、うまく行った場合、相手のPCにすでにpersonal.xls
先に存在確認する。あれば新規作成を止めてモジュールを入れるだけにする
モジュール名のダブリにも注意。
    • good
    • 0
この回答へのお礼

> "DONYU"はプロジェクト名?

このマクロを書いたブックの名前ですDONYU.XLSです。

> MicrosoftExcelObjectsを右クリックでプロパティ見て確認

ただのVBProjectでした。
Application.VBE.VBProject.VBComponents("Module1").Export ("C:\Module1.bas")としても同じ実行時エラーでした。

お礼日時:2006/06/23 13:59

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

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