2013-11-26 144 views
1

我发现了一些问题,我的代码:VBA的Excel结合2文件夹中的文本文件

此代码将插入精细的数据,如果我的文件夹名称有不同的名称(例如1234与1235),每个文件夹有很多的文本文件。都导入到具有正确文件夹名称的单独工作表,并从列a开始。问题是,如果文件夹名称是相同的(1234和1234),它将导入到相同的工作表(1234),但单独的列(列b中的第1个文件夹和列a中的第2个文件夹),我希望它从最后一行继续在列a。

我在想:我必须在这个子之后存储MyCount值吗?

Sub InsertData(ByVal path As String) 

    Dim filename As Variant 
    Sheet = ActiveSheet.Name 

    filename = path & Sheet & "\*.txt" 
    If (filename = False) Then 
     Exit Sub 
    End If 
    Dim StrFile As String 
    StrFile = Dir(filename) 
    Dim MyCount As Integer 
    Dim A As String 
    A = 1 
    MyCount = Application.CountA(Range("A:A")) 


    Do While Len(StrFile) > 0 
      Dim ws As Excel.Worksheet 
      Set ws = Excel.ActiveSheet 
      Application.DisplayAlerts = False 
      Application.DisplayAlerts = True 
      Dim File As Variant 
      File = path & Sheet & "\" & StrFile 

      With ws.QueryTables.Add("TEXT;" & File, ws.Cells(A, 1)) 
      .FieldNames = True 
      .AdjustColumnWidth = True 
      .TextFileParseType = xlDelimited 
      .TextFileTextQualifier = xlTextQualifierDoubleQuote 
      .TextFileConsecutiveDelimiter = False 
      .TextFileCommaDelimiter = True 
      .TextFileColumnDataTypes = columnFormats 
      .TextFileColumnDataTypes = Array(9, 1, 1, 9) 
      .Refresh 
      End With 
     StrFile = Dir 
     MyCount = Application.CountA(Range("A:A")) 
     A = MyCount + 1 
    Loop 

End Sub 
+1

我想你错过了一些代码。 StrFile在哪里定义? – Joe

+0

StrFile在做之前,我试图只复制重要部分,但我现在要编辑它:) – Aldin

回答

0

您需要制作一个单独的分支来处理类似的命名文件。现在,您的A值不会被重新初始化,并且下一次您在新工作表中写入一个不同名称的文件时,您将从上一张表上一行结束的行开始。

现在开始解决您当前的问题,您正在将新的QueryTable写入已由现有QueryTable占用的空间。发生这种情况时,Excel会将另一张桌子挡住。您可能必须添加多于一行,因为表格可能有总计或底部的东西。

地址:

Debug.print ws.cells(A,1)。地址

A = MyCount + 1线后,看看是否能细胞是通过现有的QueryTable占据。