Печать массива в каталоге и открытие файлов - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь использовать приведенный ниже код, однако я не понимаю, почему он печатает пустое окно сообщения?Кроме того, есть только один на каждый день, и он говорит, что есть 2 файла?

Как эффективно их распечатать, во-вторых, как мне затем использовать это, чтобы открыть лист?

Файлы записываются как samadmin15112018_??????.csv Где знаки вопроса - это отметка времени, котораяЯ не знаю.

Sub runFA()
Const yourfilepath = "R:\samsdrive\sam\test\"      
Dim s As String
Dim x As Integer
Dim v() As String

    s = Dir(yourfilepath & "samadmin" & format(Sheets("Name").Range("C3"), "yyyymmdd") & "_*.csv")

    v = Split(vbNullString)

Do Until s = ""

    x = x + 1
    ReDim Preserve v(x + 1)
    s = Dir()

Loop
If UBound(v) > 0 Then
    MsgBox "There are " & UBound(v) & " workbooks", vbOKOnly
    MsgBox v(x + 1)
Else
   If v(0) <> "" Then Workbooks.Open (yourfilepath & v(0))
   MsgBox ("There are 0 ")
End If
    End Sub

1 Ответ

0 голосов
/ 15 ноября 2018

Исправление предыдущий ответ ...

Вы получили пустой элемент, потому что исходный код изменил размер массива для первого элемента, что означало, что v(0) было всегда будет vbNullString. Со строковыми массивами вы можете воспользоваться преимуществом функции Split, возвращающей массив с UBound, равным -1, и LBound, равным 0, если вы собираетесь добавлять в него элементы динамически:

Sub runFA()
    Const targetPath = "R:\samsdrive\sam\test\"
    Dim located() As String
    located = Split(vbNullString)

    Dim result As String
    result = Dir$(targetPath & "samadmin" & Format$(Sheets("Name").Range("C3"), "yyyymmdd") & "_*.csv")

    Do Until result = vbNullString
        ReDim Preserve located(UBound(located) + 1)
        located(UBound(located)) = result
        result = Dir$()
    Loop

    If UBound(located) <> 0 Then
        MsgBox "There are " & (UBound(located) + 1) & " workbooks", vbOKOnly
    Else
        Workbooks.Open targetPath & result
    End If
End Sub

Пара других вещей на заметку

  • Я изменил имена переменных с однобуквенных идентификаторов на что-то более легкое для чтения и понимания.
  • Отступ теперь постоянный.
  • Используются строковые функции для Dir и Format.
  • Вам вообще не нужно отслеживать количество результатов с x.
  • Если у вас есть только один элемент в массиве результатов, вы можете просто использовать result - нет никаких причин для индексации обратно в массив.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...