如何使用不同列表中的新名称从一个列表中保存多个文件?

时间:2016-11-03 16:32:12

标签: excel-vba save range filenames vba

我正在尝试创建一个宏来打开一个范围内指定的文件(工作簿),刷新它然后将其保存为一个新文件,其名称在另一个范围内指定(SavedNames),然后移动转到范围中的下一个单元格(工作簿),刷新它并使用第二个范围中的下一个单元格的名称(SavedNames)将其保存下来,依此类推。我想我可以再次为SavedNames范围使用'For each cell'方法,但它会出现错误消息'For control variable has used in use'

Public Sub Refresh_All()

Dim filepathstr As String
Dim filename As String
Dim wbk As Workbook
Dim name As String

filepathstr = Sheet1.Range("filepath").Value

For Each cell In Sheet1.Range("workbooks")

If Not cell.Value = "" Then

    filename = cell.Value

    Set wbk = Workbooks.Open(filepathstr & filename, False)


    ''''**REFRESH**''''''
    SAPBexrefresh (True)

    Application.DisplayAlerts = False

        For Each cell In Sheet1.Range("SavedNames")
        If Not cell.Value = "" Then
        name = cell.Value

        wbk.SaveAs (name)
        wbk.Close False
        End If
        Next cell

    Application.DisplayAlerts = True

End If

Next cell

MsgBox "The Macro has finished; BW Reports are refreshed"


End Sub

如果有人有解决方案或解决方法,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

对于您的确切问题 - 如何在另一个For循环中使用For循环 - 您需要为第二个循环使用不同的变量。类似的东西:

Dim rngOpen As Range
Dim rngSave As Range

For Each rngOpen In Sheet1.Range("workbooks")
    ...

    For Each rngSave In Sheet1.Range(SavedNames)
        ...
    Next rngSave
Next rngOpen

但是...

这似乎是一种非常繁琐的做事方式。存储" Open"的单元格之间是否存在关系?姓名和"保存"名字呢?它们是彼此相邻或相似的两列吗?像这样:

Open | Save
Wbk1 | New1
Wbk2 | New2
Wbk3 | New3

如果是这样,您可以使用cell.offset(0,1)来引用下一列中的单元格,以便更轻松地完成它。

Dim rngOpen As Range
Dim rngSave As Range

For Each rngOpen In Sheet1.Range("workbooks")
    ...
    wbk.SaveAs filename:=rngOpen.offset(0,1).value        
Next rngOpen

进行第二次循环会产生反作用,它只能找到列表中的第一个条目;你不得不删除你的保存名称,否则就行了。