戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
ユーザーフォームの処理中はその後の処理を止めたい。

    [191425] ユーザーフォームの処理中はその後の処理を止めたい。-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/02/21(16:41))
    □U R L/
      印刷実行マクロで以下のようなマクロを組んだのですが、途中でシート選択ユーザーフォームを
      入れているのですが、ユーザーフォームでの処理を追い越して次の処理へと
      いってしまいます。
      ユーザーフォームでの処理中は以降の処理を中断させたいのですがどうしたらいいか
      分かりません。
      よろしくお願いします。
      
      
      Option Explicit
      Sub ラベル印字()
          
           Dim x As Variant
           Dim i As Long
           Dim n As Long
           Dim seihinL As Long
           Dim seiki As Long
           Dim amari As Long
           Dim hanpa As Long
           Dim m As Long
           Dim Num As Range
           Dim sh1 As Worksheet
           Dim sh11 As Worksheet
           Dim sh2 As Worksheet
           Dim sh3 As Worksheet
           Dim sh4 As Worksheet
           Dim sh5 As Worksheet
           Dim myForm As String
           
           
           Worksheets("入力シート").Protect Password:="password", UserInterfaceOnly:=True
              
           myForm = "UserForm1"
           Set sh1 = Sheets("本ラベル(1枚)3枚シート")
           Set sh11 = Sheets("本ラベル(1枚)1枚シート")
           Set sh2 = Sheets("本ラベル(2枚)")
           Set sh3 = Sheets("本ラベル(3枚)")
           Set sh4 = Sheets("半端ラベル")
           Set sh5 = Sheets("入力シート")
      
           
           '印刷処理
           Application.ScreenUpdating = True
           
           m = sh5.Range("D9") \ 3
           i = sh5.Range("D9") Mod 3
           
           If m <> 0 Then
              '3枚印刷
              sh3.PrintOut from:=1, To:=1, Copies:=m, Collate:=True, Preview:=True
              '2枚印刷
              If i = 2 Then
                  sh2.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
              '1枚印刷
              ElseIf i = 1 Then
              
               UserForms.Add(myForm).Show vbModeless '←ここでユーザーフォームの処理が入る
                  
              End If
           
           End If
           
           n = sh5.Range("F9") '←ここからの処理をユーザーフォームの処理が終わるまで止めたい
           
           If n = 1 Then
              
              
               sh4.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
           End If
           
           
           sh5.Activate
           
            With Worksheets("入力シート")
              If .ProtectContents = False Then
                  .Cells.Locked = True
                  Set Num = .Range("B3:D4,C9,E9")
                  Num.Locked = False
                  .Protect Password:="password", UserInterfaceOnly:=True
                  .EnableSelection = xlUnlockedCells
              End If
            End With
      
            Worksheets("入力シート").Activate
           
            MsgBox "印刷完了しました。"
        
      End Sub
      
      Private Sub UserForm1_Initialize()
       
          Me.CommandButton1.Caption = "1枚分のシート"
          Me.CommandButton2.Caption = "3枚分のシート"
          Me.CommandButton3.Caption = "終了"
          
      End Sub
      Private Sub CommandButton1_Click() '1枚分のシート
          Dim sh11 As Worksheet
          Set sh11 = Sheets("本ラベル(1枚)1枚シート")
           
          sh11.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
      
      End Sub
      Private Sub CommandButton2_Click() '3枚分のシート
           Dim sh1 As Worksheet
           Set sh1 = Sheets("本ラベル(1枚)3枚シート")
            
           sh1.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
          
      End Sub
      Private Sub CommandButton3_Click() '終了
          
           Unload Me
          
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191426] Re[1]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ サンダー -(2020/02/21(17:21))
    □U R L/

      ht tp://officetanaka.net/excel/vba/tips/tips113.htm
      広域変数をりようしては?




    [191427] Re[2]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ w1909 -(2020/02/21(17:30))
    □U R L/

      vbModelessをやめる




    [191480] Re[3]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/02/24(15:45))
    □U R L/

      >w1909様
      回答ありがとうございます。

      >vbModelessをやめる
      ですが、印刷プレビューで印刷物の確認をしたうえで印刷をするかしないかの
      判断操作を人間側でするのでやめることはできないんです。




    [191481] Re[4]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/02/24(15:52))
    □U R L/
      >サンダー様
      
      回答ありがとうございます。
      早速広域変数を用いてみたのですが、やはりユーザーフォームの処理を追い抜いて処理を進めてしまいます。
      
      
      Option Explicit
      
           Dim x As Variant
           Dim i As Long
           Dim n As Long
           Dim seihinL As Long
           Dim seiki As Long
           Dim amari As Long
           Dim hanpa As Long
           Dim m As Long
           Dim Num As Range
           Public sh1 As Worksheet
           Public sh11 As Worksheet
           Public sh2 As Worksheet
           Dim sh3 As Worksheet
           Dim sh4 As Worksheet
           Dim sh5 As Worksheet
           Dim myForm As String
           
      Sub ラベル印字()
          
           Dim x As Variant
           Dim i As Long
           Dim n As Long
           Dim seihinL As Long
           Dim seiki As Long
           Dim amari As Long
           Dim hanpa As Long
           Dim m As Long
           Dim Num As Range
           Dim sh1 As Worksheet
           Dim sh11 As Worksheet
           Dim sh2 As Worksheet
           Dim sh3 As Worksheet
           Dim sh4 As Worksheet
           Dim sh5 As Worksheet
           Dim myForm As String
           
           
           Worksheets("入力シート").Protect Password:="pass", UserInterfaceOnly:=True
              
           myForm = "UserForm1"
           Set sh1 = Sheets("本ラベル(1枚)3枚シート")
           Set sh11 = Sheets("本ラベル(1枚)1枚シート")
           Set sh2 = Sheets("本ラベル(2枚)")
           Set sh3 = Sheets("本ラベル(3枚)")
           Set sh4 = Sheets("半端ラベル")
           Set sh5 = Sheets("入力シート")
      
           
           '印刷処理
           Application.ScreenUpdating = True
           
           m = sh5.Range("D9") \ 3
           i = sh5.Range("D9") Mod 3
           
           If m <> 0 Then
              '3枚印刷
              sh3.PrintOut from:=1, To:=1, Copies:=m, Collate:=True, Preview:=True
              '2枚印刷
              If i = 2 Then
                  sh2.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
              '1枚印刷
              ElseIf i = 1 Then
              
               UserForms.Add(myForm).Show vbModeless '←ここでユーザーフォームの処理が入る
                  
              End If
           
           End If
           
           n = sh5.Range("F9") '←ここからの処理をユーザーフォームの処理が終わるまで止めたい
           
           If n = 1 Then
              
              
               sh4.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
           End If
           
           
           sh5.Activate
           
            With Worksheets("入力シート")
              If .ProtectContents = False Then
                  .Cells.Locked = True
                  Set Num = .Range("B3:D4,C9,E9")
                  Num.Locked = False
                  .Protect Password:="pass", UserInterfaceOnly:=True
                  .EnableSelection = xlUnlockedCells
              End If
            End With
      
            Worksheets("入力シート").Activate
           
            MsgBox "印刷完了しました。"
        
      End Sub
      
      Private Sub UserForm1_Initialize()
       
          Me.CommandButton1.Caption = "1枚分のシート"
          Me.CommandButton2.Caption = "3枚分のシート"
          Me.CommandButton3.Caption = "終了"
          
      End Sub
      Private Sub CommandButton1_Click() '1枚分のシート
          
          sh11.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
      
      End Sub
      Private Sub CommandButton2_Click() '3枚分のシート
           
           sh1.PrintOut from:=1, To:=1, Copies:=1, Collate:=True, Preview:=True
          
      End Sub
      Private Sub CommandButton3_Click() '終了
          
           Unload Me
          
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191482] Re[5]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/02/24(15:57))
    □U R L/

      ユーザーフォームで行う処理は印刷物を1枚シートに印刷するか3枚シートに印刷するか印刷用紙を選択→印刷プレビューで確認→印刷決定作業です。
      人間がどちらの用紙にしようか決めている間に次の印刷物が順番を抜かして印刷プレビューに表示されている状況です。




    [191485] Re[6]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ w1909 -(2020/02/24(16:24))
    □U R L/

      モードレス一択らしいので(よく読んでませんが)役には立ちませんが
      念のため書いておきます。

      モーダルフォームはダイアログですので
      閉じるか非表示にするまでその後の処理は実行されません。
      これ仕様です。

      モードレスの場合は表示中も処理は継続されます。
      これも仕様だと思われます。


      余談
      シートの選択とやらをユーザーフォーム上に配置した
      何らかのコントロールで行うとか?
      まあ、深追いはしません。





    [191486] Re[6]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2020/02/24(16:28))
    □U R L/
      | >vbModelessをやめる
      | ですが、印刷プレビューで印刷物の確認をしたうえで印刷をするかしないかの
      | 判断操作を人間側でするのでやめることはできないんです。
      
      シチュエーションをよく理解していませんが、
      vbModeless指定すると、
      ・ユーザーフォーム処理中にワークシートの操作が可能になりますが、
      一方で、
      ・ユーザーフォームの終了を待たずに、処理が継続されます。
      これは仕様なので如何ともしがたいでしょう。
      
      処理を二つに分けたほうが自然でしょう。
      
      # 追記:
      w1909 さんの投稿を見過ごしたまま発言していました。失礼しました。
      




    [191488] Re[7]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ チオチモリン -(2020/02/24(17:01))
    □U R L/
      >vbModelessをやめる
      
      最新バージョンでの確認はできないのですが
      バージョンによっては、モーダルのユーザーフォームでプレビューすると
      困った事態に陥ることになったような記憶がありますが、改善されていますでしょうか?
      




    [191489] Re[8]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ �ス`�スI�ス`�ス�ス�ス�ス�ス�ス -(2020/02/24(17:21))
    □U R L/
      尚 本題ですが ↓ なかんじではどうでしょう。
      
      Sub Test()
          UserForm1.Show 0
          MsgBox "ユーザーフォームは開いています"
          Do
              If UserForms.Count = 0 Then Exit Do
              DoEvents
          Loop
          MsgBox "ユーザーフォームは閉じました"
      End Sub
      
      ※ よく読んでいませんので
      >ユーザーフォームでの処理中
      をユーザーフォームが開いている間と解釈しています。
      違いましたら悪しからず。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191490] Re[9]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ チオチモリン -(2020/02/24(17:24))
    □U R L/
      上記の投稿は私です。
      削除キーを入れ忘れましたので修正できません。
      失礼しました。




    [191528] Re[10]: ユーザーフォームの処理中はその後の処理を止めたい。-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ 六 -(2020/02/26(14:17))
    □U R L/

      >w1909様、γ様
      回答ありがとうございます。
      仕様ですか…
      丁寧な解説をありがとうございます。

      >チオチモリン様
      回答ありがとうございます。
      >改善されていますでしょうか?
      いえ、何もしていない状態です。

      コードありがとうございます。
      チオチモリン様のコードを入れたところうまくできました。
      ありがとうございました。





    [191534] Re[11]: ユーザーフォームの処理中はその後の処理を止めたい。-

    記事引用/メール受信=OFF■

    □投稿者/ サンダー -(2020/02/26(19:30))
    □U R L/
      ht tps://blog.goo.ne.jp/40vq77a80/e/cef67c4dcf3b5cef2388ad69a547214b
      VBA:ユーザーフォームを組み込みダイアログのように使う
      を参考に
      
      
      Dim ret As Integer
      
      Sub tes1()
      
      ' ユーザーフォームの関数を呼び出し、その中でShowする。
      ret = UserForm1.Retfnc
      Select Case ret
      Case Is = 1
          MsgBox "1枚分のシート"
      Case Is = 2
          MsgBox "31枚分のシート"
      Case Is = 3
          MsgBox "キャンセル"
      End Select
      
      End Sub
      
      ユーザーフォーム側は ================
      
      Dim frmRet As Integer
      
      Public Function Retfnc() As Integer
        Me.Show
        Retfnc = frmRet
      End Function
      
      Private Sub CommandButton1_Click()
       frmRet = 1
        Unload Me
      End Sub
      
      Private Sub CommandButton2_Click()
       frmRet = 2
        Unload Me
      End Sub
      
      Private Sub CommandButton3_Click()
       frmRet = 3
        Unload Me
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G