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"