在ListWorkbooks中跳过PERSONAL.xlsb工作簿

时间:2014-03-26 01:38:22

标签: excel vba excel-vba

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

此外,由于Personal.xlsb没有" Data_Index"它往往会给出错误

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

2 个答案:

答案 0 :(得分:0)

修订答案

通过阅读您对其他答案的评论,您还需要确定哪些打开的工作簿还有一个名为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

您可以使用数组执行此操作,但上述操作将为您完成。

答案 1 :(得分:0)

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