#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 = Формат (дата данных, «ГГГГ-ММ»).