【VBA】Office別アプリケーションの警告メッセージ

VBAを記述したOfficeアプリから他のOfficeアプリを操作

生きる!まだ生きています。かろうじて生きてるjimです👍

今回は、VBAを記述したOfficeアプリから、別のOfficeアプリを操作。って時に。。

「うっ💦」

となったお話。(例としてWordにVBAを記述してExcelを操作という感じで説明していきますね)

まず、何でExcel操作するのにExcelにVBAを記述しないの?ってお話ですよねぇ。。。

えっと、それは次回で。(【VBA】別OfficeアプリにVBAを記述する理由

じゃあ、とりあえずの例えばで、Wordを開きVBEを開く。。と。。。

ただ、これだけじゃExcelを操作できません。

ツール⇒参照設定⇒

『Microsoft Excel 15.0 Object Library』にチェックを入れます。

勿論、Excel以外の別アプリを操作したい時(今回はExcelですが)、その都度そのアプリのライブラリにチェックを入れる必要があります。

これでVBEの用意は出来ました👈

 

別のOfficeアプリを用意

今回はExcelの操作ということで、Excelのテンプレートを用意しておきます。

その都度、workbooks.addで新規作成してもいいんですが、多分警告が出てこないっていう。。

下図のようなファイルをDドライブに用意しました。

でーん♪

ちょっとシートを削除してみますね。。。

ぺろーん♪

このメッセージを黙らせよう。

 

実際にコードを記述してみる

まず、警告非表示なしの場合。

以下の手順でコードを書いてみる。

1、『D:\Book1.xlsx』ってテンプレファイル開く

2、左から1つめのシートを削除

3、ブックを上書き保存して閉じる

Sub sakujo()
Dim myBook As Workbook
Dim mySheet As worksheet
    Set myBook = workbooks.Open("D:\Book1.xlsx")
    Set mySheet = myBook.Worksheets(1)
    mySheet.Delete
    myBook.Save
    myBook.Close
End Sub

ぺろーん♪って、保存したブックをみるとシートが削除されていない。。。

(多分キャンセルされてる)

今度は、アプリを表示し警告を非表示にする。

以下の手順のコードを書いてみる。

1、『D:\Book1.xlsx』ってテンプレファイル開く

2、Excelを表示させる

3、Excelの警告メッセージを非表示にする

4、左から1つめのシートを削除

5、ブックを上書き保存して閉じる

Sub sakujo()
Dim myBook As Workbook
Dim mySheet As worksheet
    Set myBook = workbooks.Open("D:\Book1.xlsx")
    Set mySheet = myBook.Worksheets(1)
    CreateObject("Excel.Application").Visible = True
    CreateObject("Excel.Application").DisplayAlerts = False
    mySheet.Delete
    CreateObject("Excel.Application").DisplayAlerts = True
    myBook.Save
    myBook.Close
End Subぺ

ぺろーん♪

なぜか警告メッセージが表示されます。

補足

ExcelにVBA書いてExcel操作する時は『Application.DisplayAlerts = False』だけど、

別アプリケーションの操作なので『CreateObject(“Excel.Application").DisplayAlerts = False』みたいにキッチリとアプリ指定してやらないとけません。

↓でも、アプリ非表示のままだとエラーが出ずシートが削除されます。(要するに『2』を削る)

Sub sakujo()
Dim myBook As Workbook
Dim mySheet As worksheet
    Set myBook = workbooks.Open("D:\Book1.xlsx")
    Set mySheet = myBook.Worksheets(1)
    CreateObject("Excel.Application").DisplayAlerts = False
    mySheet.Delete
    CreateObject("Excel.Application").DisplayAlerts = True
    myBook.Save
    myBook.Close
End Sub

これだとOK・・・

↓そして、今気づいたんだけど、With使ってもエラーが出ない。。。

Sub sakujo()
Dim myBook As Workbook
Dim mySheet As worksheet
    Set myBook = workbooks.Open("D:\Book1.xlsx")
    Set mySheet = myBook.Worksheets(1)
    With CreateObject("Excel.Application")
        .Visible = True
        .DisplayAlerts = False
        mySheet.Delete
        .DisplayAlerts = True
    End With
    With myBook
        .Save
        .Close
    End With
End Sub

よく分からんね。

AccessVBA使う人は知ってるネタかも。。よくわからん。。。

 

んじゃ、またね🖐