[英]VBA opening excel workbooks in recursion
我正在嘗試編寫用於創建 excel workooks 網絡地圖的代碼(例如一個文件包含指向其他七個文件的鏈接,而這些文件又具有指向可能不同文件的鏈接等)。 由於我不知道網絡中所有文件的集合,我想通過遞歸來做到這一點。 我寫了這段代碼:
Sub recLink(strPath As String)
Dim WB As Workbook
Set WB = Workbooks.Open(strPath , False, True)
If Not IsEmpty(WB.LinkSources(xlExcelLinks)) Then
For Each LNK In WB.LinkSources(xlExcelLinks)
Debug.Print LNK
Call recLink(Str(LNK))
Next LNK
Else
End If
WB.Close (False)
End Sub
問題是在第二次迭代中嘗試打開工作簿時,excel 應用程序關閉。 即使對於為測試目的而創建的小而簡單的文件也是如此。
你能幫我完成這項工作嗎? 我在這里缺少什么?
原因
The issue is on the Str(LNK) from "Call recLink(Str(LNK))".
解決方案
創建一個字符串變量並將LNK設置為該變量,然后您就可以使用字符串變量調用該函數。 這將起作用。
Dim strLink as String
.
.
strLink = LNK
Call recLink( strLink )
.
.
我是如何發現的
我才發現是因為我試圖首先將所有鏈接放入數組中,而當 VBA 只是要使用 LNK 定義數組時,也會出現同樣的問題。 所以我發現問題不可能是遞歸調用,唯一不同的是 STR() 函數。 arrLink(x) = Str(LNK)
我的建議
此代碼使 Excel 的所有窗口都隱藏起來,演示文稿更漂亮,執行速度更快。
Function recLink(strPath As String)
Dim objMaster As Object
Dim wbkMaster As Workbook
Dim strLink As String
Set objMaster = CreateObject("Excel.Application")
With objMaster
.Visible = False
Set wbkMaster = .Workbooks.Open(strPath)
If Not IsEmpty(wbkMaster.LinkSources(xlExcelLinks)) Then
For Each LNK In wbkMaster.LinkSources(xlExcelLinks)
strLink = LNK
Debug.Print strLink
Call recLink(strLink)
Next LNK
Else
End If
End With
wbkMaster.Close (False)
Set objMaster = Nothing
Set wbkMaster = Nothing
End Function
結論
測試兩個代碼並選擇最適合您的代碼。
問候 周末愉快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.