VBA - 在循环中解析变量
VBA - Resolving Variables in a Loop
我正在使用 VBA 从 SharePoint 中提取 excel 书籍并将它们保存在指定的文件夹中,我需要提取大约 11 位分析师的工作簿。我宁愿不 copy/paste 我使用 11 次的公式,所以我试图将他们的名字存储在变量中,然后使用循环。我似乎无法让它正常工作。
这是我目前所拥有的示例:
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) 代替实际名称 "Barb",公式运行良好,并保存到我的桌面文件夹。
如何获取 Name(i) 来代替 Barb、Alex、Cole 等?我试过 Namei、Name + i 和 Name(i),但没有成功。为什么这似乎无法正确解决的任何建议?我没有收到任何错误。
编辑:
根据反馈,我将程序更改为以下内容,但收到 "Subscript Out of Range" 错误:
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
我发现了错误,我在“时间Tracker.xlsm”中没有space
而不是
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")
这会创建一个 "array" 的名称,可以由您的变量 i
索引。请注意,默认情况下,此数组将从零开始,即第一个位置将为 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"
(你不能有一个具有不同值的 "constant")
并改变
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
语句。 )
问题在于缺少数组和路径:
要遍历名称,您需要将它们作为数组变量的一部分,而不是单独的字符串。
Dim Name() As String
Name = Array("Barb", "Alex", "Cole")
然后,您将路径定义为不变变量:
Const strUrl As String = "mypath\Secured\Name(i) Time Tracker.xlsm"
strSavePath = "C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm"
字符串总是:
"mypath\Secured\Name(i) Time Tracker.xlsm"
"C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm"
而不是遍历数组并按名称求值:
"..." Name(0) "..."
"..." Name(1) "..."
因为没有名称的迭代,因为 i 是文本字符串的一部分,而不是为您提供数组正确成员的变量实例化。你需要把它放在字符串外面并连接到它。
Const strUrl As String = "mypath\Secured\" & Name(i) & " Time Tracker.xlsm"
strSavePath = "C:\Users\lxys\Desktop\TimeTrack\"Name(i) & " Time Tracker.xlsm"
我正在使用 VBA 从 SharePoint 中提取 excel 书籍并将它们保存在指定的文件夹中,我需要提取大约 11 位分析师的工作簿。我宁愿不 copy/paste 我使用 11 次的公式,所以我试图将他们的名字存储在变量中,然后使用循环。我似乎无法让它正常工作。
这是我目前所拥有的示例:
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) 代替实际名称 "Barb",公式运行良好,并保存到我的桌面文件夹。
如何获取 Name(i) 来代替 Barb、Alex、Cole 等?我试过 Namei、Name + i 和 Name(i),但没有成功。为什么这似乎无法正确解决的任何建议?我没有收到任何错误。
编辑:
根据反馈,我将程序更改为以下内容,但收到 "Subscript Out of Range" 错误:
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
我发现了错误,我在“时间Tracker.xlsm”中没有space
而不是
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")
这会创建一个 "array" 的名称,可以由您的变量 i
索引。请注意,默认情况下,此数组将从零开始,即第一个位置将为 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"
(你不能有一个具有不同值的 "constant")
并改变
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
语句。 )
问题在于缺少数组和路径:
要遍历名称,您需要将它们作为数组变量的一部分,而不是单独的字符串。
Dim Name() As String
Name = Array("Barb", "Alex", "Cole")
然后,您将路径定义为不变变量:
Const strUrl As String = "mypath\Secured\Name(i) Time Tracker.xlsm"
strSavePath = "C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm"
字符串总是:
"mypath\Secured\Name(i) Time Tracker.xlsm"
"C:\Users\lxys\Desktop\TimeTrack\Name(i) Time Tracker.xlsm"
而不是遍历数组并按名称求值:
"..." Name(0) "..."
"..." Name(1) "..."
因为没有名称的迭代,因为 i 是文本字符串的一部分,而不是为您提供数组正确成员的变量实例化。你需要把它放在字符串外面并连接到它。
Const strUrl As String = "mypath\Secured\" & Name(i) & " Time Tracker.xlsm"
strSavePath = "C:\Users\lxys\Desktop\TimeTrack\"Name(i) & " Time Tracker.xlsm"