Краткое описание того, что я пытаюсь сделать:
- Импорт данных из нескольких файлов .csv в одну рабочую книгу с несколькими листами.
Описание проблемы, с которой я столкнулся:
- Суффиксы исходных файлов данных .csv меняются ежедневно (база данных автоматически добавляет дату выполнения отчета в качестве целого числа (например, сегодняшняя дата будет суффиксом 03182019]).
Я создал макрос ниже, чтобы найти необходимый файл, а затем предложить InputBox, чтобы вручную ввести суффикс (дата отчета в виде целых чисел). Этот код работает отлично и в основном отвечает моим потребностям, но я бы хотел устранить необходимость ввода суффикса вручную, так как макрос будет импортировать 15 отдельных книг. В результате мне пришлось бы вводить суффикс 15 раз - по одному разу для каждого исходного файла .csv.
Dim otherWB As Workbook, ThisWS As Worksheet
Dim sFileName As String
Dim sBase As String
Dim sExt As String
Dim sSuffix As String
Sheets("AJP EGC").Select
Set ThisWS = ActiveSheet
sBase = "/Users/plum/Downloads/AJP EGC "
sExt = ".csv"
sSuffix = InputBox("Enter suffix for filename")
sFileName = sBase & sSuffix & sExt
Workbooks.Open FileName:=sFileName
Set otherWB = ActiveWorkbook
Application.ScreenUpdating = False
ActiveSheet.Range("A1").CurrentRegion.Copy
Destination:=ThisWS.Range("A1")
otherWB.Close False
ThisWS.Activate
Set ThisWS = Nothing
Set otherWB = Nothing
Application.ScreenUpdating = True
Как отмечалось выше, этот макрос работает нормально, но мне нужно ввести суффикс вручную. Я попробовал варианты этого кода, чтобы избежать необходимости вводить суффикс вручную, поскольку исходные файлы .csv всегда загружаются в одно и то же место на моем компьютере. Вот новый код, который я пробовал:
Dim otherWB As Workbook, ThisWS As Worksheet
Dim sFileName As String
Dim sBase As String
Dim sExt As String
Sheets("AJP EGC").Select
Set ThisWS = ActiveSheet
sBase = "/Users/plum/Downloads/AJP EGC "
sExt = ".csv"
sFileName = Dir(sBase & "*" & sExt)
Workbooks.Open FileName:=sFileName
Set otherWB = ActiveWorkbook
Application.ScreenUpdating = False
ActiveSheet.Range("A1").CurrentRegion.Copy
Destination:=ThisWS.Range("A1")
otherWB.Close False
ThisWS.Activate
Set ThisWS = Nothing
Set otherWB = Nothing
Application.ScreenUpdating = True
Когда я запускаю этот код, я получаю следующую ошибку во время выполнения:

Это изображение ошибки времени выполнения показывает, что был выбран правильный суффикс, и я убедился, что это точное имя правильного файла для импорта; однако ошибка указывает, что он не может найти файл на моем компьютере. Когда я выбираю «Отладка» в окне ошибки, я перехожу к следующей строке:
Workbooks.Open FileName:=sFileName
При наведении курсора на FileName:=sFileName
после нажатия «Отладка» снова отображается правильное имя файла, хотя оно не включает местоположение каталога ... только имя файла. Файлы не изменили свое местоположение, и, как я уже сказал, при запуске первого предоставленного мной кода, который предлагает пользователю ввести суффикс вручную, он находит файлы без проблем.
Я также попытался изменить sSuffix = InputBox
в исходном коде на sSuffix = "*"
, который возвращает ту же ошибку времени выполнения, связанную с фрагментом FileName:=sFileName
. Опять же, правильное имя файла отображается в сообщении об ошибке во время выполнения.
Я не уверен, что мне здесь не хватает, и чувствую, что это должно быть что-то до боли очевидное. Буду признателен за любые идеи, которые вы могли бы предложить. Я относительный новичок к VBA и исчерпал Google и этот сайт, чтобы выяснить проблему.