VBAのユーザーフォームについての質問

このQ&Aのポイント
  • VBAのユーザーフォームに関する質問です。テキストボックスにファイル名を入力し、実行ボタンを押すことで、IEを立ち上げ、画像ファイルを開くマクロを作成しました。質問は以下の3点です。
  • 1. テキストボックスに入力した値を消すためのコードはどのように記述すればよいでしょうか?
  • 2. 「クリア」ボタンを押すことで立ち上がったIEを閉じることはできるのでしょうか?
回答を見る
  • ベストアンサー

VBAのユーザーフォームについて

VBAの全くの素人です。 ユーザーフォームについていくつか質問させてください。 テキストボックスにファイル名を入力し、実行釦を押す事で、IEを立ち上げ、画像ファイルを開くマクロを組んだ場合、 (1)「クリア」というコマンド釦を作り、その釦を押した際にテキストボックスに入力した値を消す為には、そのコードにはどのように記述すればよいでしょうか? (2)さらにその「クリア」釦を押す事により立ち上げたIEを閉じる事はできないでしょうか? (3)このマクロを組んだExelファイルを立ち上げた時点で、マクロを実行し、「終了釦」を作り、その釦により、Exelごと終了させるにはどうすれば良いでしょうか? 以上、素人の質問で恐縮ですがご教示ください。 よろしくお願いします。

  • 15974
  • お礼率64% (9/14)

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

WMVプレイヤーにURLを付け加えて起動するのですね。 それでは、OpenURL()を以下のように変更してみてください。 (念のため今のOpenURLもOpenURL_OLDなどと名前を変えて残しておいた方がよいでしょう) Sub OpenURL()  Dim Param As String  Dim Shell As Object  Param = UserForm1.TextBox1.Text  Set Shell = CreateObject("Wscript.Shell")  Shell.CurrentDirectory = Environ("ProgramFiles") & "\Windows Media Player"  Call Shell.Run("wmplayer.exe " & WmvURL & Param & ".wmv " _  & JpgURL & Param & ".jpg", 1, True)  Set Shell = Nothing End Sub それから、ユーザフォームを右上に出す方法ですが、自分で試してみたところ、なぜかうまくいきません。 位置を指定する方法は、UserFormのTop、Leftというプロパティがそれぞれフォームの左上の座標となるので、フォームを表示するイベントの中でそれらの値を設定します。左上隅が(0,0)の座標です。 左上に位置するのであれば、Top=0,Left=0とすればいいのですが、右上の場合、 Left=画面の解像度の横方向のピクセル数-Width と、位置を指定するのに画面の大きさに左右されてしまうのです。(Widthはフォームの幅を表すプロパティです) たとえば画面が1280x1024だと、 Left=1280-Width で済むのですが、もし不特定多数の人が解像度の異なるPCからこのフォームを起動するのであれば、上記のように1280と固定でなく、VBAの中から画面の画素数を取得しなければなりません。これはけっこうややこしいですが、調べて一応わかりました。 それで、まだ問題があって、これは私も理由がわからないのですが、私のPCの場合、上に書いた式 Left=画素数-Width で試したら、画面に表示されませんでした。どうも画面からはみ出した右にいるみたいで、上の数字を調節したところ、 Left=画素数-Width-320 となぜか320引かないと右上に表示されませんでした。これは原因がわかりません。 一応サンプルソースをつけますが、このままでは右上にきちんと表示されるかどうかはわからないので、調整が必要になると思います。 まず、標準モジュール(Module1)に以下をコピーしてください。 Declare Function SystemParametersInfo Lib "user32" _  Alias "SystemParametersInfoA" ( _  ByVal uAction As Long, _  ByVal uParam As Long, _  ByRef lpvParam As Any, _  ByVal fuWinIni As Long) As Long 'RECT構造体 Public Type RECT  Left As Long  Top As Long  Right As Long  Bottom As Long End Type 'モニターの有効なスクリーンサイズを取得 Public Const SPI_GETWORKAREA = 48 次に、UserFormの画面でF7を押してコードの表示画面を出し、以下のように記述してください。 Private Sub UserForm_Activate()  Dim typRect As RECT  Call SystemParametersInfo(SPI_GETWORKAREA, 0, typRect, 0)  With UserForm1   .Top = 0   .Left = typRect.Right - 320 - .Width  End With End Sub 上の -320 の部分が私の環境で調節してぴったりになった数字です。もしこれで左に寄っている、あるいは画面からはみ出している、という場合は、試行錯誤してこの数値を調節してみてください。

15974
質問者

お礼

またもや丁寧なご回答ありがとうございます! しかし・・・ Call Shell.Run("wmplayer.exe " & JpgURL & Param & ".jpg" - & WmvURL & Param & ".wmv " , 1, True) この部分で、構文エラーが・・ ちなみにJPGを先にしたいのと、ファイルとファイルの間はハイフン(-)でつなぐみたなんですが・・・ また, 1, True)の部分はどういう意味なんでしょう? すみません、ご教示ください!! 表示位置については・・・もう少しやってみます!

その他の回答 (3)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

wmplayer.exe の引数の仕様は知らなかったのですが、ハイフンを入れなくても動作したので抜きました。ハイフンを入れても入れなくても動作はするのですが…。 ご希望の書式にするのであれば、 Call Shell.Run("wmplayer.exe " & JpgURL & Param & ".jpg - " _ & WmvURL & Param & ".wmv", 1, True) と書けばよいでしょう。 > また, 1, True)の部分はどういう意味なんでしょう? これは WScript.Shell オブジェクトでEXEファイルを起動するRunメソッドの第2引数と第3引数です。 第1引数が"wmplayer.exe ~" 第2引数が1の場合はウィンドウをノーマルの大きさで、2の場合は最小化の状態で、3の場合は最大化で起動します。 第3引数のTrueは、アプリケーションの実行が終了するまで待つ指定です。Falseにするとアプリケーションの実行を待たずに次の処理を行います。 今回の場合、Trueにしていると「終了」ボタンを押してもメディアプレーヤーが終了しないと、ユーザフォームが閉じない(Excelが終了しない)ので、Falseにした方がいいかもしれません。

15974
質問者

お礼

またもや丁寧にありがとうございます。 メディアプレーヤーの終了については・・・もう少し探ってみたいと思います。 右上表示については・・・とりあえず使う端末のモニタは同じ解像度なのでなんとか簡易的にできると思います。 またお聞きする事があるかもしれませんがよろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

> ちなみに終了釦にてメディアプレーヤーも終了する事はできますか? すみません、いろいろやってみたのですが、私もそのやり方はわかりませんでした。JPGの表示ならそのままIEを閉じればいいのですが、WMVを再生すると、自動的にIEは閉じてメディアプレーヤーが起動されます。 JPGの表示と同じようにIEを閉じようとしても、すでにWMVの方のIEは閉じられておりているので何も起こりません。そうするとメディアプレーヤーを直接終了するしかないのですが、ネットで検索してみたところ、標準の機能ではできず、「WMPのオートメーション」というのをインストールしないといけないようです。 そういうわけで、申し訳ないですが終了ボタンでメディアプレーヤーを閉じる方法はちょっとわかりかねます。力及ばずすみません。

15974
質問者

お礼

とんでもありません。 本当にありがとうございました! また質問する事があったらよろしくお願いします。 ありがとうございました!

15974
質問者

補足

また追加で質問になってしまい恐縮ですが。。。 この画像ファイルと、映像ファイルをメディアプレーヤーで連続再生する形を考えたいのですが、可能でしょうか? wmplayer.exe (WMVファイル) - (JPGファイル) で連続再生が可能という所までは確認したのですが、これをマクロに組み込みたいと思います。 「実行」釦でこれを実行し、今回はメディアプレーヤーなので「クリア」は考えず、パラメータを変えてこれが連続で行えれば良いです。 また、このVBAで作った画面自体を立ち上げる際、立ち上がる位置を画面の右上に指定する事もできるでしょうか? 度々すみませんが、ご教示ください。 よろしくお願いします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

こんにちは、さきほどの質問に回答したものです。この質問は http://oshiete1.goo.ne.jp/kotaeru.php3?qid=2807325 の続きですね。 ユーザーフォーム名:UserForm1 テキストボックス名:TextBox1 実行ボタン名:CommandButton1 クリアボタン名:CommandButton2 終了ボタン名:CommandButton3 と仮定して書きます。名前を自分で変更している場合は、以下の解説中の名前は、自分で設定した名前に置きかえてください。 (1)ユーザーフォームからボタンを押してクリアさせるには、 TextBox1.Text = "" と書けばよいです。 (2)IEを閉じるには、先の質問で回答したマクロの CloseIE を実行すればいいです。(標準モジュールに作ってあるので、どこからでも実行できます) したがって、クリアボタンがクリックされたときのマクロは、 Private Sub CommandButton2_Click()  TextBox1.Text = ""  CloseIE End Sub と記述すればいいです。 (3)Excelファイルの起動時にマクロを実行するには、VBAの画面の左のThisWorkbookをダブルクリックし、 Private Sub Workbook_Open()  UserForm1.Show End Sub と記述します。ちなみに、Excelの画面自体は表示したくなく、ユーザーフォームだけを表示したい場合は、 Private Sub Workbook_Open()  Application.WindowState = xlMinimized  AppActivate "Microsoft Excel"  UserForm1.Show End Sub のようにします。ちょっとアプリケーションっぽくなります。 終了ボタンでExcelごと終了させるには、 Private Sub CommandButton3_Click()  Application.Quit End Sub と書けばいいです。 なお、先の回答ではセルからファイル名を取得していましたが、実行ボタンでテキストボックスのファイル名のJPGとWMVを開くのであれば、先の回答のマクロの、 Param = Worksheets("Sheet1").Range("A1").Value は Param = UserForm1.TextBox1.Text のようにするとよいでしょう。

15974
質問者

お礼

ありがとうございます!! 希望通りの動きになってきました。 ちなみに終了釦にてメディアプレーヤーも終了する事はできますか?

関連するQ&A

  • ユーザフォーム(VBA)で入力した内容をシートへコピーするには

    ユーザフォーム(VBA)でテキストボックスとボタンを作成しました。 このテキストボックスに入力した内容をボタンを押すことでシート1のA1セルにコピーしたいのです。こんな簡単な感じなのですが、 プログラムはどのようにしたらよいのでしょうか?教えてください。 それと、このエクセルファイルを開き、マクロを有効にするのボタンを押すと思うのですが、そのときにすでにユーザフォームが表示されているようにしたいのですが・・・どうすればいいのでしょうか? ※できたらでよいのですが、もう一つボタンを作成し『クリア』ボタンということで、テキストボックスに入力した内容だけをクリアさせるボタンも作ろうとおもうのですが、それはどうしたらよいのでしょうか? 困っています。教えてください。

  • 【Excel VBA】ユーザーフォーム

    Excel2003を使用しています。 内容的には前回の(質問No.3376017)続きなのですが… あるシートに対して、印刷範囲指定のマクロを作りました。 印刷不要ページを指定して、それ以外のページを印刷するというもので、印刷開始ページ、終了ページ、不要ページをユーザーフォームを作ってテキストボックスに入力するようにしました。 そのテキストボックスの下に、『設定』と『キャンセル』のボタンを作っていますが、『キャンセル』を選択した場合は、このマクロを実行しないで終了させたいのですが、可能ですか? 『設定』と『キャンセル』の処理は、イベントプロシージャ(クリック)に記述していますが、『キャンセル』ボタンをクリックしたときにマクロを実行しないで終了するには、どのように記述すればいいでしょうか?[Exit]を使うのかな?と思って書いてみましたが、エラーが出てしまいました(^_^;) よろしくお願いします。

  • VBAユーザーフォームで

     エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。  テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。)  VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • vba ボタン押すとユーザフォーム、リストをクリア

    vba で、実行すると、ユーザフォームとリストBOXに結果を反映するものをつくりましたが、 この反映された結果を、ボタンを押すとクリアにしたいのです。 ユーザフォーム、リストボックスの内容をクリアするには、どのような記述にすればよろしいでしょうか?

  • VBE、ユーザーフォームに関して質問があります。VBAを知って1カ月に

    VBE、ユーザーフォームに関して質問があります。VBAを知って1カ月に満たない初心者です。 ユーザーフォームでテキストボックスとコマンドボタンを1つずつ作りました。コマンドボタンを押すとテキストボックスに入れた文字・値がセルB1に入力されるようにしました。続けてテキストボックスに文字・値を入力し、コマンドボタンを押すとB2に入力されるようにしています。 ここからが質問なのですが、 コマンドボタンを押したときにA1に番号を順にふり、さらにセルを罫線で囲みたいのです。図で示すと、  A   B        A   B  _ ___      _ ___  |1|りんご| ⇒ |1|りんご|  - ---      - ---               |2|みかん|                - ---   このような感じです。また、外枠のみを太線にするということが可能であればその方法も教えて下さい。

  • ExcelのVBAで名前を付けて保存

    ExcelのVBAで名前を付けて保存としたいのですが、ユウザーフォーム上のテキストボックスに保存する名前を入力したらコマンドボタンでブックが終了するマクロを教えてほしいのですが。 よろしく御教授願います。

  • エクセルVBAのユーザーフォームのコンボボックス

    エクセルVBAのユーザーフォームのコンボボックスの入力と ファイルの保存で質問です。 エクセルVBAで ユーザーフォームのコンボボックスを使用して 1月から12月までを選択してもらい、 選択した月を コマンドボタン押した際に、 セルにその値を入力するような マクロを作成しようとしています。 またコンボボックスは標準で6月が表示されるようにしたいと思います。 ユーザーフォームのコードの一部です。 Private Sub UserForm_Initialize() Dim m As Integer For m = 1 To 12 UserForm1.ComboBox1.AddItem m Next ComboBox1.ListIndex = 6 Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 mold  '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub 標準モジュールのコード 名称 「mold」 Sub mold() ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub の様に作成して実行してみたのですが、 コンボボックスで11月を選択しても 6月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。

  • VBAユーザーフォームで郵便番号から住所変換するには?

    会社で顧客リストを作成しているのですが、エクセルではじめてVBAを利用しようと思い、ユーザーフォームを使って連続登録までのマクロコードは入力出来たのですが、テキストボックスに郵便番号を入力すると自動的に次のテキストボックスに住所が入力されるようにするには、どのようなコードを追加すればよいのでしょう?

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう