Vba 运行时错误:1004无法获取ListBox类的ListIndex属性

Vba 运行时错误:1004无法获取ListBox类的ListIndex属性,vba,excel,excel-2013,Vba,Excel,Excel 2013,我有一个非常旧的Excel电子表格,里面有一个宏 用法是:启动电子表格,按下按钮,选择几个其他电子表格,完成复制并粘贴到一个电子表格文件中 它适用于Office Excel 2007,但不适用于Office 2013 宏启动时,一旦选择了要追加的文件,Excel将报告: 运行时错误:1004 无法获取ListBox类的ListIndex属性 然后,当我单击“调试”时,它会将此VBA行标记为黄色: Set wbData = Workbooks.Open(wbLauncher.Worksheets(

我有一个非常旧的Excel电子表格,里面有一个宏

用法是:启动电子表格,按下按钮,选择几个其他电子表格,完成复制并粘贴到一个电子表格文件中

它适用于Office Excel 2007,但不适用于Office 2013

宏启动时,一旦选择了要追加的文件,Excel将报告:

运行时错误:1004
无法获取ListBox类的ListIndex属性

然后,当我单击“调试”时,它会将此VBA行标记为黄色:

Set wbData = Workbooks.Open(wbLauncher.Worksheets("config").Cells(Worksheets("config").Range("Program1").Row - 1 + shtActive.Shapes(1).ControlFormat.ListIndex, Worksheets("config").Range("Program1").Column), , True)
编辑并添加整个代码

Sub btnSelectData()
Dim fd作为文件对话框,shtActive作为工作表,fItem作为变量,cID作为整数,rID作为整数
设置shtActive=ActiveSheet
shtActive.Range(“D:D”).ClearContents
Set fd=Application.FileDialog(msoFileDialogOpen)
fd.AllowMultiSelect=True
fd.InitialFileName=工作表(“配置”).Range(“数据路径”)
fd.Show
cID=工作表(“GUI”).范围(“数据1”).列
rID=工作表(“GUI”).范围(“数据1”).行
对于fd中的每个fItem,请选择编辑项
shtActive.CELL(rID,cID)=fItem
rID=rID+1
下一个
端接头
公共子加载数据(ByVal fName作为字符串)
Dim shtActive作为工作表,wbData作为工作簿
设置shtActive=ActiveSheet
shtActive.Cells(1,1)。选择
如果fName“”则
设置wbData=Workbooks.Open(fName,True)
如果wbData.Worksheets.Count<1,则
MsgBox“在中找不到数据”&fName
其他的
wbData.Worksheets(1).Cells.Select
选择,复制
刺激,激活
活动表。粘贴
shtActive.Cells(1,1)。选择
如果结束
选择,清楚
wbData,关闭
如果结束
端接头
子btnLaunch()
Dim wbLauncher作为工作簿,shtActive作为工作表,wbData作为工作簿,shtItem作为工作表
设置wbLauncher=ActiveWorkbook
设置shtActive=ActiveSheet
Application.WindowState=xl
设置wbData=Workbooks.Open(wbLauncher.Worksheets(“config”).Cells(Worksheets(“config”).Range(“Program1”).Row-1+shtActive.Shapes(1).ControlFormat.ListIndex,Worksheets(“config”).Range(“Program1”).Column,True)
对于wbData.工作表中的每个shtItem
如果UCase(左(shtItem.Name,5))=“数据”
shtItem.激活
LoadData wbLauncher.Worksheets(“GUI”).Cells(wbLauncher.Worksheets(“GUI”).Range(“Data1”).Row-1+Val(右(shtItem.Name,Len(shtItem.Name)-5)),wbLauncher.Worksheets(“GUI”).Range(“Data1”).Column)
如果结束
下一个
wbData.工作表(1).激活
Application.WindowState=xlNormal
结束子项
编辑 我添加了一个循环,它遍历列表框并检查它是否被选中,如果被选中,它将像以前一样执行代码,但随后将继续执行,直到选中所有列表框项

Sub btnLaunch()
    Dim wbLauncher As Workbook, shtActive As Worksheet, wbData As Workbook, shtItem As Worksheet
    Dim i As Long

    Set wbLauncher = ActiveWorkbook
    Set shtActive = ActiveSheet

    Application.WindowState = xlMinimized

    For i = 1 To shtActive.ListBoxes(1).ListCount
        If shtActive.ListBoxes(1).Selected(i) Then
            Set wbData = Workbooks.Open(wblauncer.Worksheets("Config").Cells(Worksheets("confige").Range("Program1") - 1 + i, Worksheets("Config").Range("Program1").Column), , True)
            For Each shtItem In wbData.Worksheets
                If UCase(Left(shtItem.Name, 5)) = "DATA_" Then
                    shtItem.Activate
                    LoadData wbLauncher.Worksheets("GUI").Cells(wbLauncher.Worksheets("GUI").Range("Data1").Row - 1 + Val(Right(shtItem.Name, Len(shtItem.Name) - 5)), wbLauncher.Worksheets("GUI").Range("Data1").Column)
                End If
            Next shtItem
        wbData.Worksheets(1).Activate
    Next i
    Application.WindowState = xlNormal
End Sub
编辑结束
您必须将工作表上列表框的选择类型设置为“单一”,出现错误的原因是因为当前它被设置为“多”或“扩展”。您可以右键单击列表框并单击“格式控制”

我找到的所有信息都表明,当选择类型设置为除“Single”以外的任何值时,
FormatControl.ListIndex
属性不起作用

看看您的代码,无论如何选择多行似乎是不合逻辑的。
工作簿.Open
一次只能打开一个文件。当然,您可以将其合并到一个循环中以打开多个工作簿,但事实并非如此

使用调试器突出显示的行:

Set wbData = Workbook.Open("Filename as String", ,"Read only")
代码中的文件名设置如下:

bLauncher.Worksheets("config").Cells(Worksheets("config").Range("Program1").Row - 1 + shtActive.Shapes(1).ControlFormat.ListIndex, Worksheets("config").Range("Program1").Column)
代码引用了一个名为“Config”的工作表。在此工作表上,单元格由

Cells(Rowindex, Columnindex)
行和列索引是指单元格所在行和列的编号。e、 g.单元格
A2
is
Cells(2,1)
cell
E34
is`Cells(34,5)

您的代码正在设置行索引,如下所示

Worksheets("config").Range("Program1").Row - 1 + shtActive.Shapes(1).ControlFormat.ListIndex
此位表示工作表“Config”上名为“Pgrogam1”的命名范围
。行
返回此范围所在的行号。然后从该数字中减去1,然后添加所选内容的listindex,以到达保存与列表框中所选内容对应的文件名的单元格


列表框中的多个选择意味着您试图打开多个单元格,并且使用当前代码,这是不可能的,即使在office 2007下也是如此。

您可以发布更多代码吗?我看到了变量,但我不知道它们是什么或如何设置的。另外,您的工作表上似乎有一个形状对象,这是什么?好的,我添加了整个代码。到目前为止,我只在工作表上设置listbox以允许多个选择(扩展或多个)的情况下复制了错误,listindex返回listbox中所选项目的索引,显然,它不能处理多个选择。如果我在Excel 2007上使用相同的电子表格也能工作,怎么可能呢?好的,谢谢你的时间和解释,但是。。。我有一个旧的桌面和Excel 2007,在那里同样的文件工作,以及办公室将升级到O2013我该怎么办?顺便说一下,创建工作簿是为了打开多个电子表格。。。抱歉,我不是VBA大师,这就是为什么我在这里寻求帮助:-)那很好,我现在也声称自己是Excel大师。我每天都在学习,在你们升级之前,你们能看一看这个问题吗?我问这个问题是因为我仍在试图找出潜在的问题。同时,我将尝试提出一个循环,允许根据您的列表框选择打开多个工作簿。好的,谢谢您的帮助,同时我们使用我的个人笔记本电脑和excel 2007,这是不可接受的,但这是我目前唯一的方法,谢谢哦,这似乎是一个无法解决的问题,奇怪的是,我做了另一个测试,从头开始安装Office2007,就像完整选项一样,电子表格文件工作正常,我在O2013(完整安装)上尝试了同样的方法,并报告了1004错误。。。。这是废话