Проблема импорта VBA-Excel: имя файла - PullRequest
1 голос
/ 18 марта 2019

Краткое описание того, что я пытаюсь сделать:

  • Импорт данных из нескольких файлов .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

Когда я запускаю этот код, я получаю следующую ошибку во время выполнения:

Run-time Error '1004'

Это изображение ошибки времени выполнения показывает, что был выбран правильный суффикс, и я убедился, что это точное имя правильного файла для импорта; однако ошибка указывает, что он не может найти файл на моем компьютере. Когда я выбираю «Отладка» в окне ошибки, я перехожу к следующей строке:

Workbooks.Open FileName:=sFileName 

При наведении курсора на FileName:=sFileName после нажатия «Отладка» снова отображается правильное имя файла, хотя оно не включает местоположение каталога ... только имя файла. Файлы не изменили свое местоположение, и, как я уже сказал, при запуске первого предоставленного мной кода, который предлагает пользователю ввести суффикс вручную, он находит файлы без проблем.

Я также попытался изменить sSuffix = InputBox в исходном коде на sSuffix = "*", который возвращает ту же ошибку времени выполнения, связанную с фрагментом FileName:=sFileName. Опять же, правильное имя файла отображается в сообщении об ошибке во время выполнения.

Я не уверен, что мне здесь не хватает, и чувствую, что это должно быть что-то до боли очевидное. Буду признателен за любые идеи, которые вы могли бы предложить. Я относительный новичок к VBA и исчерпал Google и этот сайт, чтобы выяснить проблему.

1 Ответ

1 голос
/ 18 марта 2019

Функция Dir() возвращает имя файла, а также тип его расширения.

Чтобы решить проблему, попробуйте:

sFileName = Dir(sBase & "*" & sExt)
sFileName = sBase & sFileName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...