所以我有一个当前正在运行的VBA脚本。我只想编辑循环保存文件的名称。
我将简要介绍它目前正在做什么。基本上,它为定义的行范围循环一组动作,这里是A2:A72
。这是一个“主要”工作簿,完成此循环是收集所有输入数据的地方。每行都是单独的主题输入数据,并复制/粘贴到不同工作簿中的模板中。然后运行求解器以调整给定输入数据的模板。然后它保存并将文件命名为复制粘贴行的第一个单元格中的文本。 (即A2
,A3
,A4
等。)然后它为每一行循环,每一行都有自己的模板设置并单独保存。
这几乎是我理想的想要它的工作方式。
我只想要它保存文件名不仅像A2
,而是=C2&" - "&A2
我试过用别人建议的这个
fName = Range("C" & c.Row) & Range("A" & c.Row)
但是当我尝试时,我会得到一个Method 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$20", MaxMinVal:=3, ValueOf:=1.2, ByChange:="$F$35", 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
非常感谢所有人和任何帮助!
你不应该使用wb.Path
wb
分配给工作簿,其中fPath
是你的文件夹路径,所以使用:
Filename:=fPath & "\" & fName & ".xlsx"
或根据需要“.xlsm”。
要分配fName
使用:
fName = c.Offset(, 2).Value & " - " & c.Value
代码依次将变量c分配给A2:A72范围内的每个单元格 - 所以此刻它将代码保存71次。代码
fName = Range("C" & c.Row) & Range("A" & c.Row)
会在第一次产生c2和A2,然后在第二次产生C3和A3(依此类推。我怀疑你希望它总是使用c2然后在A中添加值 - 在这种情况下你需要
Fname = Range("C2") & "- " & c