查询某文件夹下所有EXCEL表格文件工作表行数和列数等信息

Sub CheckExcelFileINFO()
    Dim v_Path, v_FileName, v_currentWbName
    Dim v_Wbook As Workbook
    Dim v_FName2 As String
    Dim i As Long       '变量
    Dim j As Long
    Dim n As Long       '文件计数变量
    Dim v_Rows As Long  '行数
    Dim v_Cols As Long  '列数
    
    Application.ScreenUpdating = False   '暂停刷新
    'Application.DisplayAlerts = False '使不弹出询问 是否替换目标单元格内容
    'v_Path = ActiveWorkbook.Path   '当前目录
    
    Dim v_FileDialog As FileDialog
    Set v_FileDialog = Application.FileDialog(msoFileDialogFolderPicker)  '选择目录
    
    'Application.FileDialog 的参数说明:
    'msoFileDialogOpen         打开旧文件
    'msoFileDialogSaveAs       保存文件
    'msoFileDialogFilePicker   选择文件
    'msoFileDialogFolderPicker 选择目录
    
    v_FileDialog.Title = "选择文件夹"      '窗口标题
    v_FileDialog.InitialFileName = "E:\"    '设置默认目录
    'v_FileDialog.AllowMultiSelect = True  '可复选多个文件
    'v_FileDialog.Filters.Clear
    'v_FileDialog.Filters.Add "Excel文件", "*.xlsx"   '文件类型
    'v_FileDialog.Filters.Add "所有文件", "*.*"

    If v_FileDialog.Show = -1 Then  '“v_FileDialog.Show = -1”表示有选择
       v_Path = v_FileDialog.SelectedItems(1)
    Else
       MsgBox "没有选择文件夹", vbExclamation, "提示"
       Exit Sub   '退出
    End If
    'For Each vF In v_FileDialog.SelectedItems  '选择多个文件时
    '   MsgBox vF
    'Next vF

    '字符串截取子串函数说明:
    'Left(Text, num_chars)   '从左边开始截取num_chars个字符
    'Right(Text, num_chars)  '从侧边开始截取num_chars个字符
    'Mid(Text, Start_Num, num_chars)  '在第Start_Num位起截取num_chars个字符
    
    
    '调用Shell选择目录方式二:
    'Dim v_Shell
    'Set v_Shell = CreateObject("Shell.Application")
    'Set v_Path = v_Shell.BrowseForFolder(&O0, "选择文件夹", &H10, "E:\")
    'If v_Path Is Nothing Then '“Not v_Path Is Nothing”表示有选择
    '   MsgBox "没有选择文件夹", vbExclamation, "提示"
    '   Set v_Shell = Nothing
    '   Set v_Path = Nothing
    '   Exit Sub   '退出
    'End If
    'MsgBox v_Path.items.Item.Path

    If Right(v_Path, 1) <> "\" Then   '检查路径最后是否有“\”符
       v_Path = v_Path & "\"
    End If
    
    'Dir [(pathname, [ attributes ])]
    'Windows操作系统,Dir的attributes参数可使用通配符来指定多个文件:多字符 (*) 、单字符 (?)
    v_FileName = Dir(v_Path & "*.xls")
    v_currentWbName = ActiveWorkbook.Name

    n = 0  '计算文件数量
    Do While v_FileName <> ""   '遍历对应目录下文件
       If v_FileName <> v_currentWbName Then

          'On Error GoTo Error_Handle:  '打开文件失败时跳转
          On Error Resume Next   '打开文件遇到错误时继续往下执行
          Set v_Wbook = Workbooks.Open(Filename:=v_Path & v_FileName, ReadOnly:=True, UpdateLinks:=False) '打开文件
          'v_Wbook.Name  '文件名
          
          '取行数
          v_Rows = v_Wbook.Sheets(1).UsedRange.Cells(Sheets(1).UsedRange.Rows.Count, 1).Row
   
          '取列数
          v_Cols = v_Wbook.Sheets(1).UsedRange.Cells(1, Sheets(1).UsedRange.Columns.Count).Column
          
          
          '处理业务

          If Err.Number <> 0 Then
             v_Wbook.Close savechanges:=False  '关闭文件
             Set v_Wbook = Nothing
             
             '重试
             Set v_Wbook = Workbooks.Open(Filename:=v_Path, ReadOnly:=True, CorruptLoad:=XlCorruptLoad.xlRepairFile, UpdateLinks:=False)
             DoEvents
          End If
'Error_Handle:
          If Err.Number <> 0 Then  '出现错误时捕获 Err.Description 和 Err.Number
             v_FName2 = v_FName2 & Chr(13) & v_FileName & " (" & Err.Description & Err.Number & ")"
          Else
             v_FName2 = v_FName2 & Chr(13) & v_FileName  '记录处理文件名
          End If
          
          n = n + 1  '文件数+1
          
          With Workbooks(1).ActiveSheet
             j = .Cells(Rows.Count, 1).End(xlUp).Row   '当前表格第一列最后非空单元格行号
             If (j = 1 And Not IsEmpty(Cells(1, 1).Value)) Or j > 1 Then
                '若返回非空单元格行号为“1”,且对应列第1个单元格不为空
                '或者非空单元格行号大于“1”
                j = j + 1  '调整新行号为非空单元格行号+1
             End If
             .Cells(j, 1) = n
             .Cells(j, 2) = v_FileName
             .Cells(j, 3) = v_Rows & "行"
             .Cells(j, 4) = v_Cols & "列"
          End With
          
          v_Wbook.Close False  '关闭文件
          Set v_Wbook = Nothing

       End If
       
       v_FileName = Dir

    Loop

    Range("A1").Select   '定位至一个单元格
    Application.ScreenUpdating = True   '恢复
    MsgBox "搜索" & v_Path & "有" & n & "个工作薄:" & Chr(13) & v_FName2, vbInformation, "提示"
End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值