是否可以使用VBA创建Excelfile的路径?

时间:2019-03-26 09:38:04

标签: excel vba

我正在Excel上构建报告,该报告必须每月进行更新。因此,我每个月都会得到一个新的Excelfile,其中包含必须在报告中汇总的数据。 该报告包含特定Excel文件的计算以及每个月的数据,例如,男性或女性客户的数量。

是否可以通过VBA创建宏来创建新Excelfile的路径,这样我就不必手动更改文件的路径了?例如,在这种情况下,我不得不通过输入公式将公式更改为'...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 :(得分:0)

是的,有可能,当我需要创建报告和日志文件时,我自己做。只需在文件名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

现在,您已将文件保存在路径中。


注释

通过使用这种方法,它每个月都会自动创建一个新文件,您可以轻松找到该文件。

  

仅记得检查文件是否存在,否则可以启动   一个例外。

答案 1 :(得分:0)

您可以在工作表中的单元格中使用类似的功能,然后在公式中引用该单元格,然后将其保留。

例如=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

答案 2 :(得分:0)

所以现在这段代码运行得很好,并用新的引用替换了旧的引用!

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