none
userfomが消える RRS feed

  • 質問

  • Win10/excel2016Book1.xlsm/VBA/Userform1/Commandbutton1Book2.xlsmを呼び出し、Book2.xlsm/VBA/Userform1/CommandBUtton1Book2.xlsmを閉じることを2回繰り返すと、Book1.xlsm/VBA/Userform1が消えていますがなぜでしょう? ちなみにexcel97-2003では上記同様操作を1度行うとVBAが機能しなくなりますがなぜでしょう?

    2017年2月5日 2:23

すべての返信

  • Windows 10 & Excel 2016でご質問の通り試してみましたが、再現しませんでした。

    再現するコードのご提示は可能でしょうか?

    2017年2月6日 1:01
  • Workbooks("戻りVBA制御研究5.xls")のuserform1の内容です。

    Private Sub CommandButton1_Click()
        Unload Me
        Workbooks("戻りVBA制御研究3.xls").Activate
    End Sub

    Private Sub CommandButton2_Click()
        Unload Me
        Workbooks.Open ThisWorkbook.Path & "\戻りVBA制御研究3.xls"
    End Sub

    Workbooks("戻りVBA制御研究5.xls")のthisworkbookの内容です。

    Private Sub Workbook_Activate()
        If Workbooks.Count > 1 Then
            Workbooks("戻りVBA制御研究3.xls").Save
            Workbooks("戻りVBA制御研究3.xls").Close
        End If
    End Sub

    Private Sub Workbook_Open()
        Load UserForm1
        UserForm1.Show
    End Sub

    Workbooks("戻りVBA制御研究3.xls")のusrform1の内容です。

    Private Sub CommandButton1_Click()
        Unload Me
        Windows("戻りVBA制御研究5.xls").Activate
    End Sub

    Workbooks("戻りVBA制御研究3.xls")のthisworkbookの内容です。
    Private Sub Workbook_Open()
        Load UserForm1
        UserForm1.Show
    End Sub

    2017年9月10日 3:40
  • Workbooks("戻りVBA制御研究5.xls")上で
     Private Sub CommandButton2_Click()
         Unload Me
         Workbooks.Open ThisWorkbook.Path & "\戻りVBA制御研究3.xls"
     End Sub
    が実行された時に

    Workbooks("戻りVBA制御研究5.xls")は
    Activeなままなので、

    Workbooks("戻りVBA制御研究3.xls")上で
     Private Sub CommandButton1_Click()
         Unload Me
         Windows("戻りVBA制御研究5.xls").Activate
     End Sub
    が実行されても、

    Workbooks("戻りVBA制御研究5.xls")の
     Private Sub Workbook_Activate()
         If Workbooks.Count > 1 Then
             Workbooks("戻りVBA制御研究3.xls").Save
             Workbooks("戻りVBA制御研究3.xls").Close
         End If
     End Sub
    のイベントは起きないだろうと思います。

    私だったら

    一方のブック(私の場合はTest1.xls)の
    Thisworkbookに
    Private Sub Workbook_Open()
      UserForm1.Show vbModeless
    End Sub

    UserForm1に
    Private Sub CommandButton1_Click()
        Unload Me
        Workbooks.Open ThisWorkbook.Path & "\Test2.xls"
        ThisWorkbook.Close
    End Sub
    と書き

    他方のブック(当方の場合はTest2.xls)で
    Thisworkbookに
    Private Sub Workbook_Open()
      UserForm1.Show vbModeless
    End Sub

    UserForm1に
    Private Sub CommandButton1_Click()
      Unload Me
      Workbooks.Open ThisWorkbook.Path & "\Test1.xls"
      ThisWorkbook.Close
    End Sub
    と書きます。

    なお、いろいろと事情があるのかもしれませんが
    一般的には、
    1つのアプリケーションを複数のプロジェクト
    (つまり複数のマクロブック)に分散させることは
    避けるだろうと思います。
    分散させると、
    ソースコードがより読みにくくなってしまいますから。

    2017年9月10日 12:34