VBA – 解决循环中的variables

我正在使用VBA从SharePoint中拉出excel书籍并将其保存在指定的文件夹中,而我有大约11位分析师的工作簿,我需要将其拉下。 我宁愿不复制/粘贴我使用的公式11次,所以我试图将他们的名字存储在variables中,然后使用循环。 我似乎无法让它正常工作。

以下是我迄今为止的一个样本:

Sub DownloadTimeTrackers() Dim i As Integer Dim Name1 As String Dim Name2 As String Dim Name3 As String Name1 = "Barb" Name2 = "Alex" Name3 = "Cole" For i = 1 To 3 Step 1 Const strUrl As String = "mypath\Secured\Name(i) Time Tracker.xlsm" Dim strSavePath As String Dim returnValue As Long strSavePath = "C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm" returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0) Next I End Sub 

我排除了一些协助从SP拉取报告的代码,但是我不相信这与此有关。

如果我用Name(i)replace实际名称“倒钩”,公式工作正常,并保存到我的桌面文件夹。

我如何获得名字(i)来代替Barb,Alex,Cole等? 我已经尝试过Namei,Name + i和Name(i),没有运气。 任何build议,为什么这似乎不能正确解决? 我没有得到任何错误。

编辑:

根据反馈,我将程序更改为下面的内容,但收到“下标超出范围”错误:

  Sub DownloadTimeTrackers() Dim i As Integer Dim Name() As Variant Dim strUrl As String Name = Array("Barb", "Alex", "Cole", "Cim", "Adam", "Lane", "Kristin", "Mike", "Nicki", "George", "Lori") For i = 1 To 11 Step 1 strUrl = "\\collab.sfcollab.org@SSL\DavWWWRoot\sites\WSS005469\DisputeTeam\Secured\" & Name(i) & "Time Tracker.xlsm" Dim strSavePath As String Dim returnValue As Long strSavePath = "C:\Users\fip1\Desktop\TimeTrack\" & Name(i) & "Time Tracker.xlsm" returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0) Next i End Sub 

我发现这个错误,在“Time Tracker.xlsm”中没有空格

代替

 Dim Name1 As String Dim Name2 As String Dim Name3 As String Name1 = "Barb" Name2 = "Alex" Name3 = "Cole" 

使用

 Dim Name() As Variant Name = Array("Barb", "Alex", "Cole") 

这将创build一个名称的“数组”,可以通过variablesi进行索引。 请注意,这个数组默认是基于零的,也就是说第一个位置是Name(0)


你也需要改变

 Const strUrl As String = "mypath\Secured\Name(i) Time Tracker.xlsm" 

 Dim strUrl As String strUrl = "mypath\Secured\" & Name(i) & " Time Tracker.xlsm" 

(你不能有一个“常量”有不同的值)


并改变

 strSavePath = "C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm" 

 strSavePath = "C:\Users\lxys\Desktop\TimeTrack\" & Name(i) & " Time Tracker.xlsm" 

你重构的代码是

 Sub DownloadTimeTrackers() Dim strUrl As String Dim strSavePath As String Dim returnValue As Long Dim i As Integer Dim Name() As Variant Name = Array("Barb", "Alex", "Cole") For i = LBound(Name) To UBound(Name) strUrl = "mypath\Secured\" & Name(i) & " Time Tracker.xlsm" strSavePath = "C:\Users\lxys\Desktop\TimeTrack\" & Name(i) & " Time Tracker.xlsm" returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0) Next i End Sub 

(我也改变了你的循环从数组的下界到上界,这样你可以给数组增加额外的名字,而不必担心改变For语句。

问题是缺less数组和path:

要遍历名称,您需要将它们作为数组variables的一部分,而不是作为单独的string。

 Dim Name() As String Name = Array("Barb", "Alex", "Cole") 

然后,将path定义为一个不变的variables:

 Const strUrl As String = "mypath\Secured\Name(i) Time Tracker.xlsm" strSavePath = "C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm" 

string总是:

“mypath \ Secured \ Name(i)Time Tracker.xlsm”

“C:\ Users \ lxys \ Desktop \ TimeTrack \ Name(i)Time Tracker.xlsm”

而不是循环遍历数组并评估为名称:

“…”名称(0)“…”

“…”名称(1)“…”

因为没有迭代的名字,因为是文本string的一部分,而不是一个实例化的variables,会给你的数组正确的成员。 你需要把它放在string之外并连接到它。

 Const strUrl As String = "mypath\Secured\" & Name(i) & " Time Tracker.xlsm" strSavePath = "C:\Users\lxys\Desktop\TimeTrack\"Name(i) & " Time Tracker.xlsm"