Пытаюсь написать код, который откроет файл с изменяющимся именем источника и именем файла в зависимости от месяца

#excel #vba

#excel #vba

Вопрос:

Я в этом совершенно новичок, и я могу написать код для открытия определенного файла, но местоположение файла и имя файла будут меняться ежемесячно, и я не уверен, как настроить код.

Итак, например, ниже, допустим, это то, откуда берется мой источник данных, из которого я хочу, чтобы мой макрос открывал файл, куда в конечном итоге я скопирую и вставлю.

Путь к файлу, в котором будет Продажи ЗАКРЫТИЕ НА КОНЕЦ МЕСЯЦА2020 08 августа Отчеты Блок А

Файл будет называться «Отчет о продажах 2020-08«

Итак, есть пара констант, в которых сохраняется путь к данным, но есть три переменные, выделенные жирным шрифтом выше, год, месяц и конец имени файла.

Что я надеюсь сделать, так это создать некоторую функцию внутри моего Excel (куда я хочу вставить источник данных), которая сможет изменяться в зависимости от месяца, тогда макрос сможет уловить это и узнать путь, где хранится нужный файл, чтобы затем правильно открыть его.

Спасибо!

Ответ №1:

Я предлагаю функцию для возврата полного имени файла. Значение, возвращаемое функцией, может затем использоваться в качестве аргумента для WorkBook.Open метода. Вот функция.

 Function FullFileName(ByVal Mth As Integer, _
                      Optional ByVal Yr As Integer) As String

    Const Path      As String = "C:SalesMONTH END CLOSE"
    Const SubPath   As String = "ReportsUnit A"              ' end on backslash
    
    Dim Dat         As Date
    Dim Fun         As String               ' function return value
    
    If Yr = 0 Then Yr = Year(Date)          ' use current year if omitted
    If Yr < 100 Then Yr = Yr   2000         ' "20" becomes "2020"
    Dat = DateSerial(Yr, Mth, 1)            ' create a date from year and month
    
    Fun = Path amp; CStr(Yr) amp; "" amp; Format(Dat, "mm mmm")
    Fun = Fun amp; SubPath amp; "Sales Report " amp; Format(Dat, "yyyy-mm") amp; ".xlsx"
    
    FullFileName = Fun
End Function
  

Вызовите функцию, как показано ниже.

 Dim Ffn As String
Ffn = FullFileName(8, 20)
' or
Ffn = FullFileName(8, 2020)
' or simply
Ffn = FullFileName(8)
  

Вы также можете встроить вызов функции в метод Open.

 Dim MyWb As Workbook
Set MyWb = Workbooks.Open(FullFileName(8))
  

Ответ №2:

Попробуйте это

 Sub Openfile()

Dim Path1 As Variant
Dim Path2 As Variant
Dim Path3 As Variant
Dim Path4 As Variant
Dim DataDate As Variant

Dim FinalPath As String

DataDate = Sheet1.Range("A1").Value

Path1 = "C:SalesMONTH END CLOSE"
Path2 = Format(DataDate, "YYYY")
Path3 = Format(DataDate, "MM MMM")
Path4 = "ReportsUnit A"
Path5 = Format(DataDate, "YYYY-DD")

FinalPath = Path1 amp; Path2 amp; "" amp; Path3 amp; Path4 amp; "Sales Report " amp; Path5 amp; ".xlsx"

Workbooks.Open FinalPath

End Sub
  

Вставьте модуль и вызовите его.

Комментарии:

1. Спасибо за ответ. В итоге я получил ошибку синтаксической компиляции для конечной части кода path

2. Привет, я отредактировал код, пожалуйста, попробуйте еще раз. Это работает с моим Excel. Просто убедитесь, что дата в ячейке A1 отформатирована таким образом ММ ДД ГГГГ.

3. Спасибо. Я вижу, что произошло недопонимание. Путь к файлу указан ниже Продажи ЗАКРЫТИЕ НА КОНЕЦ МЕСЯЦА 2020 08 августа Отчеты Блок А в «08 августа» не указано 8 августа 2020 года. В нем указано 08, как в августе месяце, а затем перечислены первые три буквы месяца. Итак, это действительно месяц, month. нужно выяснить, как vba может это исправить

4. Просто измените путь 3 на Путь 3 = Format(DataDate, «ММ МММ»)

5. и если ваш файл Excel «Отчет о продажах 2020-08.xlsx » где 08 — это также месяц, затем измените путь 5 = Формат (дата данных, «ГГГГ-ДД») на путь 5 = Формат (дата данных, «ГГГГ-ММ»).