Excel VBA のサブルーチンを呼び出す?


天風  2003-11-09 08:57:21  No: 5621

こんばんわ。

Delphiを最近始めたばかりの駆け出しです。
プログラミング自体がビギナーなのですが、Excel VBAで作成したマクロブックを起動するための起動ファイル(EXE)を、以前どこかで教えていただいた以下のコードで作成して動作させています。

***********************************************
program OpenExcel;

uses
Windows, SysUtils, ComObj, Variants;

{$R *.RES}

var
objExcel: OleVariant;
FileName: String;
begin
if InitProc <> nil then TProcedure(InitProc);

//以下の行のブック名を記述/変更します。
FileName := ExtractFilePath(ParamStr(0)) + 'startup.xls';

if FileExists(FileName) then
begin
try
objExcel := CreateOleObject('Excel.Application');
objExcel.Visible := False;
objExcel.Workbooks.Open(FileName);
objExcel.Visible := False;
finally
objExcel := Unassigned;
end;
end;

end.

***********************************************

objExcel.Visible := False;
から、
objExcel.Visible := True;
にしているのは、ユーザーフォームのスプラッシュを起動時に表示
させているので、スプラッシュが3秒間表示し終わったら、Excel
アプリケーションをVisible = True するようになっています。

そこで、起動ファイル(EXE)を使用せず、マクロブックを直接起動
させていたときは、起動時に他のブックが起動していたら、「他の
ブックが起動しています。終了させてから起動してください。」と
いうMsgBoxを表示させるようにし、起動できないような仕様にして
いました。

しかし、起動ファイルを使用するようにしてから、その起動中の他
ブックのチェックをするサブルーチンを読まなくなってしまい、す
んなり起動してしまいます。

推測ですが、上記の起動ファイルの中から、そのルーチンを読み込む
ようにしないとダメなのではないかと考えています。
あるいは、そのルーチンのコードそのものを起動ファイルにコーディング
しないといけないのではないかと。

お手数をかけますが、ご教示いただけると大変助かります。

以下に、起動中のブックをチェックするコードを掲載しておきます。

***********************************************
Sub WBCheck()
Dim i As Long
Dim 一覧 As String
Dim Result As Long

 If Workbooks.Count = 1 Then Exit Sub
 
    For i = 1 To Workbooks.Count
        If Workbooks(i).Name <> ThisWorkbook.Name Then
            一覧 = 一覧 & Chr(13) & Workbooks(i).Name
        End If
    Next i
      
  Result = MsgBox("以下のブックが起動中です。終了させて下さい。" & Chr(13) & _
  "本ブックは単独起動で操作して下さい。" & Chr(13) & "" & 一覧, vbOKOnly, "ブック同時起動警告")

      
    If Result = vbOK Then
    On Error Resume Next
    Application.CommandBars("User Menu Bar").Delete
    On Error GoTo 0
    End If
    ActiveWorkbook.Close
End Sub
***********************************************


天風  2003-11-09 09:01:22  No: 5622

訂正です。

>objExcel.Visible := False;
>objExcel.Workbooks.Open(FileName);
>objExcel.Visible := False;

objExcel.Visible := False;
objExcel.Workbooks.Open(FileName);
objExcel.Visible := True;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加