読者です 読者をやめる 読者になる 読者になる

役に立つか?VBAメモ

仕事で使ったVBAをメモっとく

自作アドインで楽々

VBA

便利なVBAはそれぞれのBOOKにコピペして使っていたが、いちいち面倒なのでアドイン化して
右クリックメニューに追加してみました。環境はExcel2013だけどそれ以前でも大丈夫だと思う。

エクセルを起動させ、ファイル-オプション-セキュリティーセンター-セキュリティーセンターの設定から
信頼できる場所に”C:\Users\hoge\AppData\Roaming\Microsoft\AddIns”を追加しておく。
但し、これを設定すると今後外部のアドインを拾ってきた場合も全て有効になるので注意が必要。
心配なら個別に設定したほうが無難なんじゃないかな。

新規ファイルを開きVBEを起動したら、下記を書いていきます。

ThisWorkBookに記入するWorkbook_Openイベントです。
余分に5件も動作をいれてしまった・・・
--------------------------------------------------------------
Private Sub Workbook_Open()
Dim cmdBr As CommandBar
Dim RcMenu0 As CommandBarButton
Dim RcMenu1 As CommandBarButton
Dim RcMenu2 As CommandBarButton
Dim RcMenu3 As CommandBarButton
Dim RcMenu4 As CommandBarButton

'通常と改ページ表示とも「Cell」名を使っているので双方でコマンドを表示するために実行
For Each cmdBr In Application.CommandBars
If cmdBr.BuiltIn Then 'Excel既定の参照かどうかを判断。規定値はtrue
If cmdBr.Name = "Cell" Then

'Object.Add(Type, Id, Parameter, Before, Temporary)
'Type=msoControlButton、定数は1、記述方法は下記いずれもOK
Set RcMenu0 = cmdBr.Controls.Add(Type:=msoControlButton, Temporary:=True)
Set RcMenu1 = cmdBr.Controls.Add(msoControlButton, , , , True)
Set RcMenu2 = cmdBr.Controls.Add(Type:=1, Temporary:=True)
Set RcMenu3 = cmdBr.Controls.Add(1, Temporary:=True)
Set RcMenu4 = cmdBr.Controls.Add(1, , , , True)

With RcMenu0
.BeginGroup = True 'グループ化する
.OnAction = "EXTex" '動作
.Caption = "Excel終了" '表記
End With

With RcMenu1
.OnAction = "SAVEEND"
.Caption = "保存後終了"
End With

With RcMenu2
.OnAction = "ENDBK"
.Caption = "終了"
End With

With RcMenu3
.BeginGroup = True
.OnAction = "Print860"
.Caption = "№860印刷"
End With

With RcMenu4
.OnAction = "Print2800"
.Caption = "№2800印刷"
End With

End If
End If

Next


End Sub
--------------------------------------------------------------
次に標準モジュールに記入します。
今回は、自分がよく使う5件を記入した。
Excelを有無を言わさず閉じる(保存もしない)
・アクティブなBOOKを保存してから閉じる
・アクティブなBOOKを有無を言わさず閉じる
・860番と名前のついたプリンタでクイック印刷
・2800番と名前のついたプリンタでクイック印刷
--------------------------------------------------------------
Option Explicit
'Excel閉じる
Public Sub EXTex() 
Application.DisplayAlerts = False
Application.Quit

End Sub
--------------------------------------------------------------
'保存後閉じる
Public Sub SAVEEND()
On Error Resume Next
ActiveWorkbook.SAVE
Application.DisplayAlerts = False

ActiveWorkbook.Close

Exit Sub

End Sub
--------------------------------------------------------------
'BOOKの強制終了
Public Sub ENDBK()
On Error Resume Next
Application.DisplayAlerts = False
ActiveWorkbook.Close

Exit Sub

End Sub
--------------------------------------------------------------
'№860プリンタで印刷
Public Sub Print860()
On Error GoTo Errmsg
ActiveSheet.PrintOut _
Copies:=1, _
ActivePrinter:="Printers №860", _
Collate:=True
Exit Sub

Errmsg:
MsgBox "印刷するものがありません"


End Sub
--------------------------------------------------------------
'№2800プリンタで印刷
Public Sub Print2800()
On Error GoTo Errmsg

ActiveSheet.PrintOut _
Copies:=1, _
ActivePrinter:="Printers №2800", _
Collate:=True
Exit Sub

Errmsg:
MsgBox "印刷するものがありません"

End Sub

 

全て記入が終わったら、名前をつけて拡張子をアドインの「.xla」か「.xlam」にして先のユーザーアドインフォルダに保存します。
Excelを再起動すると右クリックのメニューに先ほど設定したマクロがオプション-アドイン-Excelアドインに登録されています。
有効なアドインにチェックを入れると使えるようになります。(再度Excel再起動必要?)

アドインは再度書き直そうとしても直接は開けないですが、新規BOOKを開いてみるとVBEに出てきます(<自環境では)ので再編集は可能です。

ほぼ自分用メモなので読みづらかったらゴメンナサイ。
OfficeTabを使っていと閉じる操作の度に購入を促すダイアログが出て煩わしく、そのため終了系をメインで登録してあります。

※プリンタ名は別のWin32 API関数VBAまんま拾ってきて(http://www.geocities.co.jp/Technopolis/2082/Soft/Excel/Excel_b3.htm)、取得しました。怖いんで弄くれませんw