首页 文章

Excel VBA在工作表中循环并根据单元格范围保存每个循环文件

提问于
浏览
0

任何人,

我正在尝试在excel vba中创建一个程序,其中宏将在excel范围的工作簿基础上查找/循环表单 . 此外,在查找工作表名称后,程序将根据另一个单元格范围上的给定文件名保存工作表 .

我的主要问题是如何根据下面提供的图片中给出的teritory名称保存循环文件/工作表名称 .

希望你能解决我的问题 .

这是我最近关于宏的工作,我可以保存文件,但它根据我查找的工作表名称保存文件 . 谢谢 . sample picture here

Sub Save_Test()
Dim ws As Worksheet
Dim wb As Workbook
Dim c, b As Range
Dim rng, rng2 As Range
Dim mysheet As Worksheet
Dim LastRow, LastRow2 As Integer
Dim file_name As String

LastRow = Range("I" & rows.Count).End(xlUp).row

Set rng = Range("J5:J" & LastRow)



Set ws = Worksheets("Control")
For Each c In rng

    Sheets(c.Value).Select
    Cells.Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Application.DisplayAlerts = False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    ActiveSheet.Name = c.Value
    Application.CutCopyMode = False
    ActiveWindow.DisplayGridlines = False
    TemplateLocation = ThisWorkbook.Path

    file_name = c.Value
    ActiveWorkbook.SaveAs Filename:=TemplateLocation & "\" & "Reports" & "\" & Format(Now() - 1, "mmyy") & " " & file_name & " Hustle Board thru " & Format(Now() - 1, "mm-dd-yy"), FileFormat:=51, CreateBackup:=False

    Application.DisplayAlerts = False
    ActiveWindow.Close

Next
Sheets("Control").Select
End Sub

1 回答

  • 0

    你将不得不填写你需要做的其他事情,但是从你的图片和你的代码开始,这应该得到 teritory 列中的值

    Dim r As Range
      Dim rng As Range
      Dim LastRow As Long
      Dim ws As Worksheet
    
      LastRow = Range("I" & Rows.Count).End(xlUp).Row
    
      Set rng = Range("J5:J" & LastRow)      
       For Each r In rng
    
            file_name = r.Offset(, -1)
              ActiveWorkbook.SaveAs Filename:=TemplateLocation & "\" & "Reports" & "\" & Format(Now() - 1, "mmyy") & " " & file_name & " Hustle Board thru " & Format(Now() - 1, "mm-dd-yy"), FileFormat:=51, CreateBackup:=False
    
       Next r
    End Sub
    

    顺便说一句,如果您还不知道,在下面声明如下所示的varibales并不是一个好习惯 .

    Dim rng, rng2 As Range
    

    在这种情况下, rng 此时不是rng . 您需要在下面执行此操作以明确声明为 Range 变量 .

    Dim rng as Range, rng2 As Range
    

相关问题