Excel VB用于从文件夹

时间:2015-07-29 12:06:37

标签: excel vba excel-vba

我正在开发一个excel项目,需要从网络上的文件导入数据。 我面临的问题如下:

我有一个文件夹(在共享驱动器中),其中子文件夹和最终子文件夹中的excel文件很少。 excel文件有许多选项卡,我必须从其中仅从一个特定选项卡(例如摘要)导入数据。必须对所有子文件夹中的所有文件重复此过程。 以下是描述的流程图。

文件夹A - >子文件夹1 - >子文件夹2 - > {Excel file1,Excel file2}

现在,我要找的是,每当我在子文件夹2中添加一个新的excel文件时,excel文件的相同选项卡(摘要)中的数据(所有excel文件都有相同的选项卡和不同的数据) )应该导入我的目标excel文件并制作数据图表。我需要一个VB脚本来运行此功能。

另外,如果我有更多的子文件夹,那么VB需要更长的时间才能运行吗?

我尝试了以下但似乎不起作用:

Sub ConFiles()
    Dim Wbname As String
    Dim Wb As Workbook
    Dim ws As Worksheet
    Dim ws1 As Worksheet
    Dim lngCalc As Long
    Dim lngrow As Long

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        lngCalc = .CalculationState
        .Calculation = xlCalculationManual
    End With

    Set ws1 = ThisWorkbook.Sheets.Add
    'change folder path here
    FolderName = "C:\temp"
    Wbname = Dir(FolderName & "\" & "*.xls*")

    'ThisWorkbook.Sheets(1).UsedRange.ClearContents
    Do While Len(Wbname) > 0
        Set Wb = Workbooks.Open(FolderName & "\" & Wbname)
        Set ws = Nothing
        On Error Resume Next
        'change sheet name here
        Set ws = Wb.Sheets("loging form")
        On Error GoTo 0
        If Not ws Is Nothing Then
            lngrow = lngrow + 1
            ws.Rows(2).Copy ws1.Cells(lngrow, "A")
        End If
        Wb.Close False
        Wbname = Dir
    Loop

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = lngCalc
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

zip(numbers,in_range(numbers))        # Generator
list(zip(numbers,in_range(numbers)))  # List of (value,in_range) tuples

上面的代码是如何获取所有excel文件。接下来是...打开工作簿并阅读每个工作表。要按文件读取文件,可以使用 Function GetExcelFiles(ByVal strFilePath As String) As String() Dim arrStr As String() = Nothing If Directory.Exists(strFilePath) Then arrStr = GetFilePath(strFilePath) Else 'error message here End If Return arrStr End Function Private Function GetFilePath(ByVal strFilePath As String) As String() Dim arrFileNames As String() = Directory.GetFiles(strFilePath, "*.xls", SearchOption.AllDirectories) Return arrFileNames End Function 循环。

For Each

其中For Each strFileName In arrStr 'your code here Next

别忘了添加strFileName = GetExcelFiles(folderPath) 那么

Imports Microsoft.Office.Interop.Excel

现在你有了工作簿。要读取每个工作表,请按照这种方式执行,并将其放在一个返回布尔值的函数中。

Dim excel As New Application
Dim workbook As Workbook = excel.Workbooks.Open(strFileName)

现在您可以继续进行处理了。