2014-10-09 4 views
0

Есть ли способ найти количество элементов в массиве?Код VBA Поиск количества элементов в массиве

Мой список тхт файлов:

C.txt 
D.txt 
G.txt 
H.txt 

С кодом ниже я агрегированных файлы .txt в течение имеют выход только один текстовый файл (output.txt).

Но мне нужно собрать файлы txt только тогда, когда все четыре файла txt представлены на пути к другому серверу. Мне нужно, чтобы в коде появилось предупреждающее сообщение.

Вы можете мне помочь?

Заранее спасибо.

Option Compare Database 

Dim path 
Function go() 
    Dim ArrTest() As Variant 
    Dim I As Integer 
    Dim StrFileName As String 

    path = CurrentProject.Path 

Ouput: 
ArrTest = Array("C", "D", "G", "H") 

        file_global = "" & path & "\Output.txt" 

        fn = FreeFile 
        Open file_global For Output As fn 
        Close 
        For I = 0 To UBound(ArrTest) 

         StrFileName = "" & path & "\Output_" & ArrTest(I) & ".txt" 

         fn = FreeFile 
         Open StrFileName For Input As fn 
         Open file_global For Append As fn + 1 
         Line Input #fn, datum 
         Do While Not EOF(fn) 
         Line Input #fn, datum 
         datums = Split(datum, Chr(9)) 
         For d = 0 To UBound(datums) 
          If d = 0 Then 
           datum = Trim(datums(d)) 
          Else 
           datum = datum & ";" & Trim(datums(d)) 
          End If 
         Next 
         Print #fn + 1, datum 
         Loop 
         Close 
        Next I 

    Application.Quit 
End Function 

ответ

0

Попробуйте это (иначе, чем ваш метод, но испытанный, предполагая, что все текстовые файлы, в том числе вызова книги находится в одной папке):

Option Explicit 
Private Sub AppendTxtfilesConditional() 
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
Dim path As String, xp, J As Integer, I As Integer, K As Integer 
Dim FSOStream As Object, FSOStream1 As Object, FSO As Object, fol As Object, fil As Object 
Dim srcFile As Object, desFile As Object 
Dim ArrTest() As Variant 
ArrTest = Array("C", "D", "G", "H") 
J = 0 
path = ThisWorkbook.path 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set fol = FSO.GetFolder(path) 

    For I = 0 To UBound(ArrTest) 
     K = 0 
     For Each fil In fol.Files 
      If ArrTest(I) & ".txt" = fil.Name Then 
       MsgBox (ArrTest(I) & ".txt" & " is found") 
       J = J + 1 
        If J > UBound(ArrTest) Then GoTo L12 
       K = J 
      End If 
     Next 

     If K = 0 Then MsgBox ArrTest(I) & ".txt" & " not found" 
    Next 

    MsgBox "aborted" 
    GoTo final 

L12: 
    For I = 0 To UBound(ArrTest) 
     Set srcFile = FSO.GetFile(path & "\" & ArrTest(I) & ".txt") 
     On Error GoTo erLabel 
     Set desFile = FSO.GetFile(path & "\Output.txt") 
     On Error GoTo 0 
     Set FSOStream = srcFile.OpenAsTextStream(iomode:=ForReading, Format:=TristateUseDefault) 
     Set FSOStream1 = desFile.OpenAsTextStream(iomode:=ForAppending, Format:=TristateUseDefault) 
      Do While Not FSOStream.AtEndOfStream 
       xp = FSOStream.ReadLine 
       FSOStream1.Write vbCrLf & xp ' vbCrLf & xp or 'xp & vbCrLf 
      Loop 
     FSOStream.Close 
     FSOStream1.Close 
    Next 

erLabel: 
    If Err.Number = 53 Then 
     MsgBox "Aborted : destination file not found" 
     GoTo final 
    End If 

final: 
Set FSOStream = Nothing: Set FSOStream1 = Nothing: Set FSO = Nothing: Set fol = Nothing 
Set fil = Nothing: Set srcFile = Nothing: Set desFile = Nothing 
End Sub 

NB If работает для вас then знака в качестве ответа else комментарий end if

Смежные вопросы