VBA: 如何获取(更多)动态文件名?

VBA: How to get a (more) dynamic file name?

所以我有一个当前可用的 VBA 脚本。我只想编辑循环保存文件的名称。

我将简要描述一下它目前正在做什么。基本上它为定义的行范围循环一组操作,这里 A2:A72。这是一个完成此循环的 'main' 工作簿,也是收集所有输入数据的地方。每行都是一个单独的主题的输入数据,并且 copy/pasted 到不同工作簿中的模板中。然后求解器 运行 调整给定输入数据的模板。然后它将文件保存并命名为复制粘贴行的第一个单元格中的文本。 (即 A2A3A4 等。)然后它会为每一行循环此操作,每一行都会设置并单独保存自己的模板。

这几乎就是我理想中希望它工作的方式。

我只想将文件名保存为 A2,而是 =C2&" - "&A2

我尝试使用某人推荐的这个

fName = Range("C" & c.Row) & Range("A" & c.Row)

但是当我尝试时,我会收到方法 SaveAs 错误。在手表视图中,我可以看到这是因为它没有读取 fName,所以它只是脚本值中的文件路径。我将其改回 c.Value 然后通过将文件命名为 A 列单元格开始工作。不可否认,我真的不明白 c.Value 是如何返回 A 列的,这让我更难弄清楚如何修改它以获得我想要的内容。

无论如何,这是我目前拥有的脚本:

Sub RunModels()

Dim fPath As String
Dim strTemplate As String
Dim fName As String
Dim wb As Workbook
Dim c As Range
Dim rngLoop As Range

'Where will files get stored?

fPath = "H:\ACQUISITIONS\Personal (D-AP)\Gmo\ALL MF"

'Where is the template file?
strTemplate = "H:\ACQUISITIONS\Personal (D-AP)\Gmo\ALL MF\Garden Grove - 11121 Chapman Ave.xlsm"

'Error check
If Right(fPath, 1) <Application.PathSeparator Then
    fPath = fPath & Application.PathSeparator
End If

Application.ScreenUpdating = False

'Set Loop
Set rngLoop = ThisWorkbook.Worksheets("Sheet1").Range("A2:A72")

'Set Looped Actions
For Each c In rngLoop.Cells
    'Open the template file
    Set wb = Workbooks.Open(strTemplate)
    'Add some data to the template file
    c.EntireRow.Copy Destination:=wb.Worksheets("Insert
Sheet").Range("A2")
     SolverOk SetCell:="$H", MaxMinVal:=3, ValueOf:=1.2, ByChange:="$F", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve
    'Dynamic File Naming
    fName = c.Value
    'Save the file and close
    wb.SaveAs Filename:=wb.Path & Application.PathSeparator & fName
    wb.Close
Next c

Application.ScreenUpdating = True

End Sub

非常感谢大家的帮助!!

代码将变量 c 依次分配给范围 A2:A72 中的每个单元格 - 因此目前它正在保存代码 71 次。代码

  fName = Range("C" & c.Row) & Range("A" & c.Row)

会在第一次通过时产生 c2 & A2,然后在第二次产生 C3 & A3(依此类推。我怀疑你希望它始终使用 c2,然后在 A 中添加值 - 其中如果你需要

 Fname = Range("C2") & "- "  & c

你不应该使用 wb.Path wb 分配给工作簿,其中 fPath 是你的文件夹路径,所以使用:

Filename:=fPath & "\" & fName & ".xlsx" 

或根据需要“.xlsm”。

要分配 fName 使用:

fName = c.Offset(, 2).Value & " - " & c.Value