- ベストアンサー
excel2000のVBAを配布用に改造したい
- excel2000のVBAを配布用に改造する方法を教えてください。
- 多数のユーザーに配布するための自動的なPERSONAL.XLSのModule 1への追記方法を教えてください。
- さらに「mailsheetopen」のコマンドをツールバー右下に自動的に表示させる方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1さんと同様にアドインをお勧めしますが、アドインについての記事は詳しく正確に書こうとされているのでしょうが、どうも敷居が高い気がして、自分も長いこと手が出せないでいました。 あるブックから、他のブックを操作できる(ブック名や、シート名を指定して、selectやactivateしないで操作)スキルがあれば、アドインを作るのは難しくありません。売り物にするような完成度を求める場合は別だとは思いますが。 simpleAddin.xls というブックを作成し、次の様なコードを組み込み、アドインとして保存します。(simpleAddin.xla) メニューからツール/アドイン/参照でsimpleAddin.xlaを組み込めば使用できます。 なお、Projectに保護をかけないと、コードが見えてしまいます。また当方もxl2000です。 ☆Thisworkbookモジュールに、アドイン組み込み時のメニュー組み込み、取り外し時のメニュー削除のコードを書きます。 Private Sub Workbook_AddinInstall() Dim NewM As Variant, NewC As Variant ''新しいメニューを追加する Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) NewM.Caption = "simpleAddin" ''オリジナルコマンドを追加する Set NewC = NewM.Controls.Add With NewC .Caption = "メールシートを開く" .OnAction = "mailsheetopen" .BeginGroup = False End With 'セルの右クリックメニューを追加 Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "選択セルの合計" .OnAction = "sumSelection" .BeginGroup = True End With End Sub Private Sub Workbook_AddinUninstall() On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("simpleAddin").Delete Application.CommandBars("Cell").Controls("選択セルの合計").Delete On Error GoTo 0 End Sub ☆標準モジュールに、目的のコードを書きます。 ちょっといじってあります。また、右クリックメニューの事例はおまけです。 Private Sub passget() Dim TempObject As MSForms.DataObject Set TempObject = New MSForms.DataObject With TempObject .SetText "<<http://" & ActiveWorkbook.FullName & ">>" .PutInClipboard End With Set TempObject = Nothing End Sub Private Sub mailsheetopen() Dim target_dir As String Dim target_file As String Dim target_sheet As String Call passget target_dir = "C:\Users\new\Desktop" target_file = "rensyu.xls" target_sheet = "rensyu" If Dir(target_dir & "\" & target_file) = "" Then MsgBox "File not found" Exit Sub End If Workbooks.Open Filename:=target_dir & "\" & target_file With Workbooks(target_file) .Sheets(target_sheet).Range("B6").PasteSpecial End With End Sub 'おまけ 右クリックメニュー登録事例用 Private Sub sumSelection() Dim myCell As Range Dim mySum As Double Dim CB As New DataObject On Error GoTo errHandle If TypeName(Selection) <> "Range" Then Exit Sub For Each myCell In Selection.Cells mySum = mySum + myCell.Value Next myCell With CB .SetText CStr(mySum) .PutInClipboard End With MsgBox "合計:" & CStr(mySum) & vbCrLf & "をクリップボードにコピーしました" Set CB = Nothing errHandle: End Sub
その他の回答 (1)
- doara_2011
- ベストアンサー率59% (25/42)
(1)可能ではありますが、あまりお勧めではありません。 マクロウィリスが自分自身のコピーを、他のExcelファイルに書き込むのと同じ手法を 使用するからです。 アドインを作成し、それを配布するというのはいかがですか? 以下のサイトが参考になると思います。私も大変お世話になっています。 http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub06_010.html (2)の”「mailsheetopen」のコマンド”というのはmailsheetopenを起動させる コマンドボタンのことでしょうか? だったら、以下でよい? Sub Macro1() ActiveSheet.Buttons.Add(ActiveWindow.UsableWidth - 72, 1, 72, 20).Select Selection.OnAction = "mailsheetopen" End Sub ただし、列見出しをOFFにしなければきっちり右下になりません。
お礼
回答ありがとうございます。 ご紹介頂いたサイトはとても丁寧で親切にきめ細かく作られていたと思います。 しかし、私の理解力不足で、まだ実践投入出来そうにありませんでした。 もう少し、時間をかけて理解を深めていきたいと思います。 ありがとうございました。
お礼
mitarashi様 回答ありがとうございます。 まだうまく作れていませんが、アドインを作るきっかけが出来そうです。 私にとってとても難しいことなので、もっと時間をかけて、作っていきたいと思います。 ありがとうございました。