Можно ли создать путь к Excelfiles с помощью VBA? - PullRequest
0 голосов
/ 26 марта 2019

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

Возможно ли создать через VBA макрос, который создает путь к новому файлу Excelчтобы мне не приходилось менять путь к файлу вручную?В этом случае, например, вместо того, чтобы мне пришлось изменить формулу на '...non_activated-2019-03', набрав ее, Excel должен сделать это автоматически, потому что существует более 60 таких вычислений, в которых мне пришлось бы изменить файл.

=COUNTIFS('C:\Users\denni\Desktop\Reporting\Non Activated\[non_activated-2019-02.xlsx]non_activated-2019-02'!$M:$M;$B$9;'C:\Users\denni\Desktop\Reporting\Non Activated\[non_activated-2019-02.xlsx]non_activated-2019-02'!$B:$B;$C10)

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

Вы можете использовать такую ​​функцию в ячейке, на листе, затем ссылаться на ячейку в формулах, а затем оставлять их в покое.

Например, =GetLatestImportFile("C:\workspace\dummy data\")

Function GetLatestImportFile(strPath As String, _
        Optional strLookFor As String = "non-activated")

Dim f As Scripting.FileSystemObject
Dim fld As Scripting.Folder
Dim fl As Scripting.File
Dim dt As Date

Set f = New Scripting.FileSystemObject
Set fld = f.GetFolder(strPath)

For Each fl In fld.Files

    If InStr(1, fl.Name, strLookFor) > 0 Then
        If fl.DateCreated > dt Then
            dt = fl.DateCreated
            GetLatestImportFile = fl.Name
        End If
    End If

Next fl

set f=nothing
set fld=nothing
set fl=nothing

End Function
0 голосов
/ 27 марта 2019

Так что сейчас этот код работает довольно хорошо и заменяет старую ссылку новой!

Sub MySub()
   Dim old as String
   Dim new as String
   Dim i as Integer

   old = "activated-2019-01"
   new = "activated-2019-02"
   For i=4 to 160
      Cells(i,"E").FormulaLocal = Replace(Cells(i,"F").FormulaLocal, old, new)
   Next i
End Sub
0 голосов
/ 26 марта 2019

Да, это возможно, и я делаю это сам, когда мне нужно создавать отчеты и файлы журналов.Просто добавьте следующее в ваше имя файла String:

filename = "...non_activated-" & Year(Date) & "-" & Month(Date)

Номер месяца с 0

Если вы хотите, чтобы номер месяца начинался с 0, вы можете просто изменитькод, подобный следующему:

Sub yourSub()
   '...
   filename = "...non_activated-" & Year(Date) & "-" & getMonthNumber(Date)
   '...
End Sub

Function getMonthNumber(data As Date) As String
    If Month(data) < 10 Then
        getMonthNumber = "0" & Month(data)
    Else
        getMonthNumber = Month(data)
    End If
End Function

Откройте ваш файл

Существует множество способов открыть (и написать) ваш файл.Вы можете попробовать это:

Open yourPath & yourFilename For Output As #1
Print #1, "Print somenthing on your file"
'Do your stuff
Close #1

Теперь у вас есть файл, сохраненный на вашем пути.


Примечания

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

Просто не забудьте проверить, существует ли файл , в противном случае он может запустить исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...