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

时间:2016-06-30 20:44:52

标签: excel vba excel-vba

任何人,

我正在尝试在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 :(得分: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
顺便说一句,如果您还不知道,在下面声明如下变量并不是一种好习惯。

Dim rng, rng2 As Range

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

Dim rng as Range, rng2 As Range