簡體   English   中英

VBA-循環解析變量

[英]VBA - Resolving Variables in a Loop

我正在使用VBA從SharePoint中提取excel圖書並將其保存在指定的文件夾中,我大約有11位分析師需要提取其工作簿。 我寧願不復制/粘貼我正在使用的公式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)代替實際名稱“倒鈎”,則該公式可以正常工作,並保存到我的桌面文件夾中。

如何獲得Name(i)來代替Barb,Alex,Cole等? 我試過Namei,Name + i和Name(i)都沒有運氣。 有什么建議為什么這似乎不能正確解決? 我沒有任何錯誤。

編輯:

根據反饋,我將程序更改為以下內容,但是收到“下標超出范圍”錯誤:

    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")

這將創建一個名稱的“數組”,該數組可以由變量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"

(您不能使用具有不同值的“常數”)


並改變

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)時間Tracker.xlsm”

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

而不是遍歷數組並作為名稱求值:

“ ...”名稱(0)“ ...”

“ ...”名稱(1)“ ...”

因為沒有名稱的迭代,因為i是文本字符串的一部分,而不是變量的實例化,該變量將為您提供適當的數組成員。 您需要將其放在字符串之外並連接到它。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM