我正在尝试创建一个宏来打开一个范围内指定的文件(工作簿),刷新它然后将其保存为一个新文件,其名称在另一个范围内指定(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
如果有人有解决方案或解决方法,我们将不胜感激!
答案 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
进行第二次循环会产生反作用,它只能找到列表中的第一个条目;你不得不删除你的保存名称,否则就行了。