ExcelVBAについての質問です。


環境:WinXP Office2010β

インターネットのサーバ上に保存されているExcel(xlsxでマクロ埋め込み不可)をURLリンクで開くときに
ファイル名に任意文字列が含まれているかどうかで分岐したいと考えており、PERSONAL.XLSBに

Sub Auto_Open()

Dim URLBOOK As String

URLBOOK = ActiveWorkbook.Name

If InStr(1, URLBOOK, "任意文字") > 0 Then

MsgBox "任意文字を含むブックを開きました"

End if

End Sub


としたのですが、当然のことながらExcelを新規で起動したときにしかチェックしません。

すでに別のブックが起動している状態でもURLリンクのブックを開いたときに
上記分岐が出来る方法をご存じでしたらご教示いただきたくお願い致します。



回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/05/20 12:56:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント200pt

アプリケーションレベルのイベントを定義しないと難しいようです。

次のページを参考に実装してみました。

http://devlibrary.businessobjects.com/businessobjectsxir2/ja/ja/...

Excel2010ではテストしていませんが、Excel2007では次の方法でできました。


1 PERSONAL.xlsにクラスモジュールを追加して、プロパティウィンドウで名前をAppRefClassとします。


2 次のコードをそのクラスモジュールにコピペ。

Public WithEvents boapp As Application

Private Sub boapp_WorkbookOpen(ByVal Wb As Workbook)
    Dim URLBOOK As String
    URLBOOK = Wb.Name
    If InStr(1, URLBOOK, "任意文字") > 0 Then
        MsgBox "任意文字を含むブックを開きました"
    End If
End Sub

3 PERSONAL.xlsに標準モジュールを追加


4 その標準モジュールに次のコードをコピペ。

Dim AppRef As New AppRefClass
    
Sub Auto_Open()
    Set AppRef.boapp = Application
End Sub
id:pocon

すげー。クラスモジュールなんて初めてつかいました。

2010βでも希望通り動作しました。

いつもありがとうございます。(_ _)

2010/05/20 12:38:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません