【问题标题】:Excel VBA Looping in sheet and saving every looped file based on cell rangeExcel VBA在工作表中循环并根据单元格范围保存每个循环文件
【发布时间】:2016-06-30 20:44:51
【问题描述】:

任何人,

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

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

希望你能帮我解决我的问题。

这是我最近在宏上的工作,我可以保存文件,但它会根据我查找的工作表名称保存文件。谢谢。 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

【问题讨论】:

  • 一个好的问题是最好包含一些代码,或者至少是对特定问题的清晰描述,而不仅仅是规范。选择您在处理时遇到问题的第一个特定部分,然后询问。
  • 请查看How to Ask
  • 对不起,我的代码上传晚了。你去吧。我已经将我最近工作的代码用于保存文件。我想要的只是让文件名基于特定的单元格范围,而不是基于工作表名称。
  • 我强烈建议您阅读并实施how to avoid using .Activate,它会为您省去头疼的问题并帮助代码运行得更快。

标签: vba excel


【解决方案1】:

您必须填写您需要做的其他事情,但是关闭您的图片并编写代码,这应该会为您提供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 此时不是 rng。您需要在下面执行此操作以显式声明为Range 变量。

Dim rng as Range, rng2 As Range

【讨论】:

  • 那么请将其标记为答案,如果对您有帮助,请投票给它。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 2023-03-21
  • 2015-08-03
  • 2023-03-31
  • 2016-01-31
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
相关资源
最近更新 更多