Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 用于在几个打开的工作簿之间导航的Userform_Excel_Vba_Userform - Fatal编程技术网

Excel 用于在几个打开的工作簿之间导航的Userform

Excel 用于在几个打开的工作簿之间导航的Userform,excel,vba,userform,Excel,Vba,Userform,我有一个小程序VBA,它实际上是一个用户窗体,允许我显示当前打开的所有现有工作簿。通过此用户表单,我可以选择另一个工作簿,通过单击列表框中显示的工作簿名称,它可以通过激活该工作簿来将我重新定向到所需的工作簿。问题是,它并不是每次都有效,有时当我试图单击列表框中所需的工作簿时,它不一定会将我重新定向到所需的工作簿。可能与我的列表框相关的代码有问题:与Me.ListBox1If.ListIndex-1,然后是工作簿(.Value).Activate 如果有人能帮我,那就太好了 谢谢 泽维尔 请在下面

我有一个小程序VBA,它实际上是一个用户窗体,允许我显示当前打开的所有现有工作簿。通过此用户表单,我可以选择另一个工作簿,通过单击列表框中显示的工作簿名称,它可以通过激活该工作簿来将我重新定向到所需的工作簿。问题是,它并不是每次都有效,有时当我试图单击列表框中所需的工作簿时,它不一定会将我重新定向到所需的工作簿。可能与我的列表框相关的代码有问题:
与Me.ListBox1If.ListIndex-1,然后是工作簿(.Value).Activate
如果有人能帮我,那就太好了

谢谢 泽维尔

请在下面找到我的代码:

'code in module in VBAproject (personal.XLSB)
Sub UserFormmanagementworkbooks()
    UserForm2.Show vbModeless
End Sub

'code in userform called Userform2
Sub UserForm_Initialize()
    Dim n As Long
    Do
        n = n + 1
        Me.ListBox1.AddItem Workbooks(n).Name
    Loop Until n = Workbooks.Count
End Sub

Sub ListBox1_Click()
    With Me.ListBox1
        If .ListIndex <> -1 Then Workbooks(.Value).Activate
    End With
End Sub
VBA项目(personal.XLSB)中模块中的代码 子用户表单管理工作簿() UserForm2.Show vbModeless 端接头 'userform中名为Userform2的代码 子用户表单_初始化() 长 做 n=n+1 Me.ListBox1.AddItem工作簿(n).名称 循环直到n=工作簿。计数 端接头 子列表框1_单击() 和我一起 如果.ListIndex为-1,则工作簿(.Value).Activate 以 端接头
我能想到三个问题

  • 首先可能是初始化的问题,我已经初始化了n=0
  • 第二个问题是,表单在打开工作簿时会获取工作簿列表,因此从逻辑上讲,它不会查找初始化后打开的任何工作簿

  • 第三个问题可能是excel窗口。您的表单将在一个excel窗口中获取工作簿,如果您打开两个excel,则不会从中获取excel工作簿。 以以下案例为例

  • a。双击excel文件时,它将在同一窗口中打开

    b。当您在已经存在的excel窗口中单击“打开”并打开一个文件时,该文件将在同一窗口中打开

    c。从excel快捷方式打开另一个excel时,您正在打开另一个excel,该excel中的任何文件都不会包含在表单中


    我的知识仅限于excel的几个版本,可能在其他版本中情况有所不同,但在我所看到的版本中,情况可能就是这样。

    我可以想到三个问题

  • 首先可能是初始化的问题,我已经初始化了n=0
  • 第二个问题是,表单在打开工作簿时会获取工作簿列表,因此从逻辑上讲,它不会查找初始化后打开的任何工作簿

  • 第三个问题可能是excel窗口。您的表单将在一个excel窗口中获取工作簿,如果您打开两个excel,则不会从中获取excel工作簿。 以以下案例为例

  • a。双击excel文件时,它将在同一窗口中打开

    b。当您在已经存在的excel窗口中单击“打开”并打开一个文件时,该文件将在同一窗口中打开

    c。从excel快捷方式打开另一个excel时,您正在打开另一个excel,该excel中的任何文件都不会包含在表单中


    我的知识仅限于excel的几个版本,可能在其他版本中情况有所不同,但在我所看到的版本中可能会出现这种情况。

    我之所以添加此项,是因为两个原因(1)我觉得初始化变量总是一个好主意(2)第二个是我还没有测试过,但是当表单第二次初始化时,它可能会得到旧的n值(在某些语言中确实会发生),非常感谢Usmanhaq的观点,在0初始化时,它似乎工作得更好一些…关于打开的新工作簿,您是对的,如果我在userform仍然打开时打开一个新的列表,它不会自动添加到listbox中(换句话说,我的listbox不是动态的)。在这种情况下,我必须关闭userform并重新打开它,然后我可以看到新工作簿在我的列表框中打开。我之所以添加它,是因为两个原因(1)我觉得初始化变量总是一个好主意(2)第二个原因是我没有测试它,但当窗体第二次初始化时,它可能会得到旧值n(在某些语言中确实会发生这种情况)非常感谢Usmanhaq的观点,在0处进行初始化似乎效果更好…关于打开的新工作簿,您是对的,如果我在userform仍然打开时打开一个新工作簿,它不会自动添加到列表框中(换句话说,我的列表框不是动态的)。在这种情况下,我必须关闭userform并重新打开它,然后才能看到新工作簿在我的列表框中打开。
    Sub UserForm_Initialize()
        Dim n As Long
        n = 0
        Do
            n = n + 1
            Me.ListBox1.AddItem Workbooks(n).Name
        Loop Until n = Workbooks.Count
    End Sub