Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba 列出工作簿时跳过PERSONAL.xlsb工作簿_Vba_Excel - Fatal编程技术网

Vba 列出工作簿时跳过PERSONAL.xlsb工作簿

Vba 列出工作簿时跳过PERSONAL.xlsb工作簿,vba,excel,Vba,Excel,我有一个代码来列出所有打开的工作簿,因为我所有的代码都在Personal.xlsb中。它也会被列出,有人能告诉我一个从列表中跳过Personal.xlsb的条件吗 此外,由于Personal.xlsb没有“数据索引”,因此它也倾向于给出一个错误 Sub ListWorkbooks() Dim Wb As Workbook For j = 1 To Workbooks.Count Sheets("Data_Index").Select Range("H3").Cells(j, 1)

我有一个代码来列出所有打开的工作簿,因为我所有的代码都在Personal.xlsb中。它也会被列出,有人能告诉我一个从列表中跳过Personal.xlsb的条件吗

此外,由于Personal.xlsb没有“数据索引”,因此它也倾向于给出一个错误

Sub ListWorkbooks()
Dim Wb As Workbook
For j = 1 To Workbooks.Count
    Sheets("Data_Index").Select
    Range("H3").Cells(j, 1) = Workbooks(j).Name
For i = 1 To Workbooks(j).Sheets.Count

Next i 
Next j
End Sub

修改后的答案

通过阅读您对其他答案的评论,您还需要确定哪些打开的工作簿也有一个名为Data_Index的工作表,这就是为什么您的下标超出范围(您的代码假设每个工作簿都有一个名为Data_Index的工作表)

这在我测试时适用:

Sub ListWorkbooks()
Dim Wb As Workbook, wb2 As Workbook
Dim sht As Worksheet
Dim c As Range

'Identify which (if any) of the open workbooks has sheet Data_Index
'Note if more than one it will pick the last one it finds
On Error Resume Next
For j = 1 To Workbooks.Count
    Set sht = Workbooks(j).Sheets("Data_Index")
Next j
On Error GoTo 0

'Check at least one has the required sheet
If sht Is Nothing Then
    MsgBox "There is no open workbook with a sheet named Data_Index", vbExclamation
Else
    'Set the destination for the first workbook name
    Set c = sht.Range("H3")
    For j = 1 To Workbooks.Count
        If Workbooks(j).Name = "Personal.xlsb" Then GoTo NextWb
        c.Value = Workbooks(j).Name
        For i = 1 To Workbooks(j).Sheets.Count
            ' Whatever you want to do cycling sheets
        Next i
        'Offset to the next row ready for the next name
        Set c = c.Offset(1, 0)
NextWb:
    Next j
End If
End Sub
您可以使用数组来实现这一点,但上面的方法可以帮您实现。

子列表工作簿()
Sub ListWorkbooks()
    Dim Wb As Workbook
    Dim i As Integer, j As Integer
    For j = 1 To Workbooks.Count
        If Workbooks(j).Name <> ThisWorkbook.Name Then
            Workbooks(j).Sheets("Data_Index").Range("H3").Cells(j, 1) = Workbooks(j).Name
        End If

        'not sure what you want to do here
        For i = 1 To Workbooks(j).Sheets.Count

        Next i
    Next j
End Sub
将Wb设置为工作簿 尺寸i为整数,j为整数 对于j=1到工作簿。计数 如果是工作簿(j)。请命名此工作簿。然后命名 工作手册(j).表格(“数据索引”).范围(“H3”).单元格(j,1)=工作手册(j).名称 如果结束 “我不知道你想在这里做什么 对于i=1到工作簿(j).张数 接下来我 下一个j 端接头
如果是工作簿(j)。请命名此工作簿。然后命名
跳过此工作簿workbook@TimWilliams如果
不应该是“想做什么就做什么”@Stephinn您需要在for循环中完全限定对象名,这表示“不相等”@sam092-是的,我的错误…第5行的下标超出范围错误根据其他答案中的评论修改了答案用于打印第一个工作簿“数据索引”表的列表抱歉,我很困惑。您指的第一个工作簿是哪一个?因为您说的
Personal.xlsb没有“数据索引”
…假设我打开了3本工作簿,然后打开了
Personal.xlsb
(因为它是用每个excel文件打开的)是我的第一本工作簿,第1册和第2册分别是第二本和第三本,其中有工作表
Data\u Index
,对于所有
workbook
,有工作表
Data\u Index
的所有打开的
workbook
文件的列表将在
Data\u Index:H3打印,因此第1册、第2册的
Data\u Index
工作表将同时打印是否有打开工作簿名称的列表?