VBで作成したプログラムを外部で実行するには?

解決


kuzuha  2008-04-18 06:56:42  No: 100572

はじめて質問します。
EXCELに標準装備されているVBでフォームとプログラムを作りましたが、現在はVB上のメニューで実行を選択してフォームを動かしています。
フォームをVB上ではなく1つのウインドウとして単体で起動させるにはどうしたらよいでしょうか?


もげ  2008-04-18 17:47:22  No: 100573

用語の使い方の問題ですが、

>EXCELに標準装備されているVB

VisualBasic For Applications(VBA)という
Microsoft Officeシリーズ等に搭載されているプログラミング言語
であり、VisualBasicの親戚といえますが、別物です。
貴殿のケースでは「ExcelのVBA」で通じます。

さて本題ですが、
>1つのウインドウとして単体で起動させる
ことは、厳密に言えば無理ですが、

Sub Auto_Open()
    Application.Visible = False
    UserForm1.Show (vbModal)
    Application.Quit
End Sub

のようにExcelを非表示にしてフォームだけ開いているように見せる
ことは可能でしょう。

もしくは、ExcelのVBAではなく、VisualBasicを使用するか...


kuzuha  2008-04-19 09:00:39  No: 100574

たった今確認しました。有難うございます。
VBAはVBと同等の機能を有していると思っていましたが別物ですか。
返信頂いたソースを試してみたいのですがどのように記述すれば良いでしょうか?
コードに追加して一つの関数として動かすようですがフォームが開く時最初に呼ばれるのはUserForm_Initialize()ですよね。
かなり初歩な質問と思いますが最初に上記のAuto_Open()を呼ばせるにはどうしたら良いでしょうか?


もげ  2008-04-21 17:16:40  No: 100575

>コードに追加して一つの関数として動かすようですがフォームが開く時最初に呼ばれるのはUserForm_Initialize()ですよね。

もちろんそこでもよいです。
Private Sub UserForm_Initialize()
  MsgBox "Excelを非表示にする"
  Application.Visible = False
End Sub

>最初に上記のAuto_Open()を呼ばせるにはどうしたら良いでしょうか?

http://office.microsoft.com/ja-jp/excel/HA010346281041.aspx
http://www.excel.studio-kazu.jp/mag2/backnumber/mm20040817.html

このへんにいろいろあるので、研究してみてください。
http://www.moug.net/tech/exvba/index.htm


もげ  2008-04-21 17:16:41  No: 100576

>コードに追加して一つの関数として動かすようですがフォームが開く時最初に呼ばれるのはUserForm_Initialize()ですよね。

もちろんそこでもよいです。
Private Sub UserForm_Initialize()
  MsgBox "Excelを非表示にする"
  Application.Visible = False
End Sub

>最初に上記のAuto_Open()を呼ばせるにはどうしたら良いでしょうか?

http://office.microsoft.com/ja-jp/excel/HA010346281041.aspx
http://www.excel.studio-kazu.jp/mag2/backnumber/mm20040817.html

このへんにいろいろあるので、研究してみてください。
http://www.moug.net/tech/exvba/index.htm


kuzuha  2008-04-23 06:35:36  No: 100577

こんばんは。EXCELの非表示が出来ました。
VBの画面を非表示にするのはやっぱり出来ないようですね。
単体のVBならEXEファイルの作成から単一のアプリケーションファイルが作成出来るようですがVBAでは無理なんですね。
丁寧に色々教えて頂き大変参考になりました。有難うございました。^^;


紅閃光  URL  2008-05-02 21:01:51  No: 100578

(・−・)ん?

>VBの画面を非表示にするのはやっぱり出来ないようですね。

VBの画面とは「Visual Basic Editor」のことですか?
ひょっとして「サブ/ユーザーフォームの実行」を使っていますか?

ThisWorkbookに以下の記述をすればいいですよ?

Private Sub Workbook_Open()
    Application.WindowState = xlNormal
    Application.Left = UserForm1.Left + 1
    Application.Top = UserForm1.Top + 1
    Application.Width = UserForm1.Width
    Application.Height = UserForm1.Height
    
    UserForm1.Show (vbModal)
    Application.Quit
End Sub

ま、一瞬だけExcelが表示されたりしますけど。
チラミ☆-(ノ゜Д゜)八(゜Д゜  )ノイエーイ

エクセルの表示を消すために「Application.Visible」プロパティをFalseにした場合、タスクバーからも隠れてしまいます。
この状態でVBAのエラーが発生してVBAが強制終了した場合、エクセルは終了されずにプロセスに残り続けます。
Application.Visibleはできるだけ避けておいたほうが良いでしょう

ちなみにWorkbook_Openイベントは、xlsファイルを実行したとき(開いたとき)に自動的に発生するイベントです。

マクロの警告がうるさいときは、「ツール→マクロ→セキュリティ」のセキュリティレベルを「低」にしておく必要があります。
ただしVBAの編集ができなくなるので、戻すときはファイル無しでExcelを起動してセキュリティレベルを変更すればよいです。

上記のままだと、Excelのサイズが変更されてしまうので、ちょっといまいちです。

Private Sub Workbook_Open()
    Static xPos     As Long
    Static yPos     As Long
    Static xSize    As Long
    Static ySize    As Long
    xPos = Application.Left
    yPos = Application.Top
    xSize = Application.Width
    ySize = Application.Height
    UserForm1.Left = 300        'ここにユーザーフォームを
    UserForm1.Top = 200         '表示したい位置を書く
    Application.WindowState = xlNormal
    Application.Left = UserForm1.Left + 1
    Application.Top = UserForm1.Top + 1
    Application.Width = UserForm1.Width
    Application.Height = UserForm1.Height
    
    UserForm1.Show (vbModal)
    
    Application.Left = xPos
    Application.Top = yPos
    Application.Width = xSize
    Application.Height = ySize
    Application.Quit
End Sub

とかね。

まぁ、vbModalだと都合が悪いときはまた違った書き方が必要ですが。


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

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






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