检查带标题的文件是否为空

时间:2015-05-12 20:06:26

标签: excel vba excel-vba runtime-error

我正在编写一个VBA代码来检查其他文件是否为空。这些文件都有标题,所以我想检查一下" A2"单元格为空或长度为零。我的代码如下,file1,dir1,dirfile1是文件名,目录,路径。我也有一个问题是我是否需要打开文件才能访问它的" A2"细胞。

Private Sub CommandButton2_Click()

Dim file1, dir1, dirfile1 As String

file1 = "NAMBS." & Range("f3")
dir1 = Range("D11")
dirfile1 = dir1 & "\" & file1

Range("F14").Clear

If Len(Dir(dirfile1)) = 0 Then
    Range("F14") = "missing"
Else
    Workbooks.Open (dirfile1)
    If IsEmpty(ThisWorkbook.Sheets(dirfile1).Range("a2")) Then
        Range("F14") = "empty"
    End If
    Workbooks(file1).Close
End If
End Sub

错误消息是运行时错误' 9':下标超出范围。基本上,我想访问" A2"另一个表格中的单元格,检查是否为空,然后关闭它。

1 个答案:

答案 0 :(得分:0)

尝试在打开文件时设置工作簿对象类型变量。

Private Sub CommandButton2_Click()
    Dim file1 As String, dir1 As String, dirfile1 As String
    Dim wbo As Workbook

    With ThisWorkbook.ActiveSheet
        file1 = "NAMBS." & .Range("f3")
        dir1 = .Range("D11")
        dirfile1 = dir1 & "\" & file1

        .Range("F14").Clear

        If Len(Dir(dirfile1)) = 0 Then
            .Range("F14") = "missing"
        Else
            Set wbo = Workbooks.Open(dirfile1)
            If IsEmpty(wbo.Sheets(1).Range("a2")) Then
                .Range("F14") = "empty"
            End If
            wbo.Close , False
            Set wbo = Nothing
        End If
    End With
End Sub

所有单元格范围引用都会返回到由With/End With块确定的父级。打开的工作簿由分配给工作簿对象的wbo变量明确引用。

如果这些文件是CSV并且它们都有一个公共标题,那么请检查文件大小是否大于仅标题文件,并且您不必打开它们以确定它们是否已填充。