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

问题描述 投票:0回答:2

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

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

这几乎是我理想的想要它的工作方式。

我只想要它保存文件名不仅像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

非常感谢所有人和任何帮助!

excel vba filenames
2个回答
0
投票

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

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

或根据需要“.xlsm”。

要分配fName使用:

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

0
投票

代码依次将变量c分配给A2:A72范围内的每个单元格 - 所以此刻它将代码保存71次。代码

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

会在第一次产生c2和A2,然后在第二次产生C3和A3(依此类推。我怀疑你希望它总是使用c2然后在A中添加值 - 在这种情况下你需要

 Fname = Range("C2") & "- "  & c
© www.soinside.com 2019 - 2024. All rights reserved.