アプリからVB(Form)の初心者向けコードについて

このQ&Aのポイント
  • アプリからVB(Form)の初心者向けコードについての質問です。
  • Form1が開いている状態で、Form1のcommand1ボタンを押すとForm1が最小化され、WORDが起動しファイルが開きます。その後、WORDが終了するとForm1が再び開かれるような処理のコードにて問題が発生しています。
  • 5番と6番の処理で詰まっており、解決方法を教えていただきたいです。
回答を見る
  • ベストアンサー

アプリからVB(Form)

初心者ですが教えていただきませんか? やりたい事(順序) 1. Form1が開いています。(ノーマル表示) 2. Form1のcommand1ボタンを押す事により 3. Form1が最小化され 4. WORDが起動され、ファイルが開きます。(WORD最大表示) 5. WORDが終了(閉じられた時) 6. Form1が開きます。(ノーマル表示) 5番と6番で詰まっております。 ご教授をお願い致します。 コード Private Sub Command1_Click(Index As Integer) Dim wdApp As Object Dim ThisPos As Long WindowState = vbMinimized Set wdApp = CreateObjec("Word.Application") wdApp.Visible = True Set wddocuments = wdApp.Documents.Open("C:\test.doc") ThisPos = Application.WindowState 'アプリの画面表示を変更する If ThisPos = wdWindowStateNormal Then wdApp.WindowState = wdWindowStateMaximize Else wdApp.WindowState = wdWindowStateMaximize End If Set wdApp = Nothing    End Sub

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

  • ベストアンサー
回答No.1

手元にVB環境があれば試してあげたいけど、無いから正常に動くかどうかは未確認ですが・・・スペルミスもあるかも^^; 5.本来なら起動したWordのタスクIDを監視して終了判断すべきですけど、 簡単に実現するならばwdApp.Visibleの状態を監視すれば可能です。 6.WindowStateをノーマルに戻せばいいのでは? 【コード】 ----------------------------------------------- 'Win32 API(グローバルエリアに定義しましょう) Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ----------------------------------------------- Private Sub Command1_Click(Index As Integer) Dim wdApp As Object Dim ThisPos As Long WindowState = vbMinimized '☆---Add start  'もし画面が最小化にならないならこの一文を入れてください 'DoEvents '☆---Add start Set wdApp = CreateObjec("Word.Application") wdApp.Visible = True Set wddocuments = wdApp.Documents.Open("C:\test.doc") ThisPos = Application.WindowState 'アプリの画面表示を変更する If ThisPos = wdWindowStateNormal Then wdApp.WindowState = wdWindowStateMaximize Else wdApp.WindowState = wdWindowStateMaximize End If '☆---Add start 'Wordの終了を監視 Do Until (wdApp.Visible = False) Sleep 500 Loop '画面状態を戻す WindowState = vbNormal '☆---Add e n d Set wdApp = Nothing End Sub

kena1969
質問者

お礼

siddhaartha様 有難うございます。 Do 条件 で良かったのですね。 助かりました。

関連するQ&A

  • VB.NET Form1からForm2を開いたり閉じたりする方法

    VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。また、form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。 '----------------------------------- Private Sub CheckBox2_CheckedChanged ・・・   Dim f_cnt As Integer   Dim form2 As New Form2()   f_cnt = My.Application.OpenForms.Count   If CheckBox1.Checked = True Then     If f_cnt = 1 Then form1.Show() 'モードレスフォームとして表示する   Else    form2.Close() ←閉じない   End If End Sub '-----------------------------------

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • vb6.0のFormの遷移がうまくいきません。

    Form1からForm2に移動するときのプログラム Private Sub Command5_Click() Form2.Show With Form1 .Enabled = False .Visible = False End With End Sub です。 Form2からForm1に移動するときのプログラム Private Sub Command1_Click() Form1.Show With Form2 .Enabled = False .Visible = False End With End Sub Form1からForm2に移動し、Form2からForm1に移動する 事は出来たのですが。もう一度、Form1からForm2に 移動しようとするとBeep音が鳴り移動できません。 なぜ、2回目は失敗するのでしょうか? プログラムに問題はありますか?

  • VB2008 Formを関数の引数にする

    お世話になります VB2008で開発をしています Formを2つ作成し どちらも同じ名称のテキストBOX(TextBox1)コントロールを貼り付けています Publicの関数でそれぞれのFormに値をセットしたいのですが 「'TextBox1' は 'System.Windows.Forms.Form' のメンバではありません。」 とエラーが発生してしまいます 初歩的な質問で申し訳ありませんが ご助言頂けると助かります 宜しくお願い致します ソース: --------------------------------------------------- Module Module1 Public Sub Main() Dim Form1 As New Form1 Dim Form2 As New Form2 SetValue(Form1) SetValue(form2) End Sub Private Sub SetValue(ByVal obj As Form) obj.TextBox1 = "TEST" End Sub End Module ---------------------------------------------------

  • VB2008 Form間の計算について

    VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上

  • Excel VBAで呼び出したWordが文書への差し込みボタンが効かない状態で開く

    以下のExcel VBAでWordは開くのですが、新規文書への差し込みボタンが、活きていないです。参照設定は、Microsoft Word 11.0 Object Libraryを入れています。 どうしたらいいのでしょうか?困っています。 Sub Wordを開き、差し込み印刷する() Dim ワード As Object Dim ワード文書 As Object Dim フルパス As String フルパス = "D:\案内状.doc"          'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動 ワード.Visible =True 'Wordを表示 Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End Sub

  • VB.NET:モーダルで表示したフォームを最小化

    Form2をForm1の所有として、モーダルで表示しました。 '------------------------ Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChildMdl.Click  'Form2を開く  Dim frmN As New Form2  frmN.ShowDialog(Me) 'MeはForm1 End Sub '------------------------ Form2が最小化された時に、親フォームであるForm1も最小化させたいと思い、 Form2のResizeメソッドに以下のようなコードを書きました。 '------------------------ Private Sub Form2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize  Select Case Me.WindowState   Case FormWindowState.Minimized    '親フォームも最小化((1))    Me.Owner.WindowState = FormWindowState.Minimized   Case FormWindowState.Maximized    '親フォームも最大化((2))    Me.Owner.WindowState = FormWindowState.Maximized   Case FormWindowState.Normal    '親フォームも通常サイズ((3))    Me.Owner.WindowState = FormWindowState.Normal  End Select End Sub '------------------------ しかし、(2)、(3)は問題なく実行できるのですが、 (1)を実行すると、自フォーム(Form2)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。

  • Formオブジェクトについて

    Formオブジェクトに関する質問です。 ある関数にフォームオブジェクトを引数として渡してやりたいのですが、何かよい方法はありますでしょうか? 例) Private Sub cmdTest_Click(Index as Integer) Dim frm as Form If Index = 0 then Load_Test(Form 2) Else Load_Test(Form 3) End if End Sub Private Sub Load_Test(frm as Form) frm.Show frm.Label1.Caption = "TEST” End Sub

  • vb.netでForm_Loadの終了判定について

    vb.netのWindowsApplicationでForm_Loadの終了判定ってどうやっていますか? Visual Studio 2015 visual Basic .net TextChangedイベントなどが、Form_Loadの前に走って 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 になってしまいがちですが、 これを回避するために、とりあえず下記の対応をしましたが、 スイッチをONにするハンドルはMyBase.Loadで良かったのか、 普通はどうするのか、 などをご教授ください。 <暫定対応> Dim SW_FormLoad As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  処理  :  SW_FormLoad = True End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged  If Not SW_FormLoad Then Return  処理 End Sub

  • 3フォームの重なり順を変えない方法+同時最小化

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 Form1(メインフォーム)の下にForm2を、 Form2の下にForm3を表示し、これらの順番が変わらないように致したく、 次のようにコーディングいたしました。 【Form1のコード】  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    Dim form2o As New Form2    Dim form3o As New Form3    Me.Owner = form2o    form2o.Show()  End Sub 【Form2のコード】  Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    Dim form3o As New Form3    Me.Owner = form3o    form3o.Show()  End Sub  この状態のまま、タスクバー上のアプリケーション名をクリックした際の 最小化⇔普通化を(3フォームとも一緒に)させたいのですがうまくいきません。。  Form1に、下の【コード1】のようにコーディングいたしましたら、 タスクバーのForm1クリック(最小化) →3つとも最小化(成功)いたしますが、 Form1とForm2がタスクバー上から消えてしまい、Form1クリックによる最大化ができなくなります。  またForm3に、下の【コード2】のようにコーディングいたしましたら、 タスクバーのForm3をクリックしてもForm1が一回ちらつくだけで、最小化すらできません。。  まったく違うイベントを取る方法や、Owner指定方法自体を行わない方法でも結構でございますので、 何かこの動作をうまくできる方法はないでございましょうか?  ずっと悩んでおりますが、解決致しません。もしお詳しい方がいらっしゃいましたら, 是非ともアドバイスいただきたく、どうぞよろしくお願いいたします。 【コード1】   Public Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize     Dim form2o As New Form2     If Me.WindowState = FormWindowState.Minimized Then       Owner.WindowState = FormWindowState.Minimized       Owner.Owner.WindowState = FormWindowState.Minimized     ElseIf Me.WindowState = FormWindowState.Normal Then       Owner.WindowState = FormWindowState.Normal       Owner.Owner.WindowState = FormWindowState.Normal     End If   End Sub 【コード2】   Public Sub Form3_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize     If Me.WindowState = FormWindowState.Minimized Then       Form1.WindowState = FormWindowState.Minimized       Form2.WindowState = FormWindowState.Minimized     ElseIf Me.WindowState = FormWindowState.Normal Then       Form2.WindowState = FormWindowState.Normal       Form1.WindowState = FormWindowState.Normal     End If   End Sub  何卒お願いいたします。

専門家に質問してみよう