如何根据单元格范围重命名文件名?

时间:2021-01-10 06:55:55

标签: excel vba

我正在为一个供应商提取 12 个 Excel 文件。我有很多供应商有 10 或 12 个 Excel 文件。每个 Excel 文件都是一个供应商表单。每个 Excel 文件只有一张工作表,即“sheet1”。供应商名称位于每个 Excel 文件的单元格范围 (C9:F9) 中。我想将所有这 12 个 Excel 文件“Sheet1”提取到一个工作簿中。然后我想使用基于单元格范围 (C9:F9) 的名称(即供应商名称)保存这个新的合并 Excel 文件。我正在使用以下代码。此代码帮助我将 Excel 文件合并到一个工作簿中。但我想更改以下代码行...

wbNew.SaveAs Filename:="C:\Users\s\Desktop\C\Consolidation", FileFormat:=xlWorkbookNormal

我希望文件名基于单元格范围(C9:F9),例如 Consolidation_XYZ(XYZ 是供应商名称,在 C9:F9 中)。

代码是:

Sub ImportFiles()
Dim wbOpen As Workbook
Dim wbNew As Workbook
Dim fName As String
'Change Path
Const strPath As String = "C:\Users\s\Desktop\A\"
Dim strExtension As String
MsgBox ("Do you Want to Extract Files?")
'Comment out the 3 lines below to debug
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error Resume Next
    ChDir strPath
    'Change extension
    strExtension = Dir("*.xls")
      Set wbNew = Workbooks.Add
    'Change Path, Name and File Format
    wbNew.SaveAs Filename:="C:\Users\s\Desktop\C\Consolidation", FileFormat:=xlWorkbookNormal
          Do While strExtension <> ""
            Set wbOpen = Workbooks.Open(strPath & strExtension)
                  With wbOpen
                .Sheets("Sheet1").Copy After:=wbNew.Sheets(wbNew.Sheets.Count)
    ActiveSheet.Name = ActiveSheet.Range("F6")
                wbNew.Sheets(wbNew.Sheets.Count).Name = wbNew.Sheets(wbNew.Sheets.Count).Cells(1, 1)
                .Close SaveChanges:=False
            End With            
            strExtension = Dir            
        Loop
 Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
On Error GoTo 0
MsgBox ("Files Extracted Succussfully")
fName = Dir("C:\Users\s\Desktop\A\*.*")
Do While fName <> ""
If fName <> "Master1.xls" And fName <> "Master2.xls" Then  'or .txt or .csv or whatever
Kill "C:\Users\s\Desktop\A\" & fName
End If
fName = Dir
Loop
End Sub

2 个答案:

答案 0 :(得分:0)

根据您提供的代码可以创建新的自变量,您可以在其中存储范围“C9:F9”的值,并在打开文件时使用相同的变量来存储名称文件意味着范围“C9:F9”和保存文件时使用相同的方法。

答案 1 :(得分:0)

尝试以下操作:

为文件名声明一个字符串变量:

Dim strVndr as String

将供应商名称分配给变量... 对于 Office365:

strVndr=application.WorksheetFunction.TextJoin("_",False, range("C9:F9"))

否则,请尝试:

strVndr=application.WorksheetFunction.Concat(Range("C9"),"_",Range("D9"),"_",Range("E9"),"_",Range("F9"))

然后修改您的原始 SaveAs 行以组合您的路径和文件名(注意我在原始文件名行中添加了最后一个反斜杠):

wbNew.SaveAs Filename:="C:\Users\s\Desktop\C\Consolidation\" & strVndr, FileFormat:=xlWorkbookNormal
相关问题