能否将循环生成的字符串赋值给Folder类型变量?
能否用循环生成的字符串直接赋值Folder类型变量?
通常我们可以通过链式调用直接给Folder类型变量赋值:
Dim FldrDest As Folder Set FldrDest = Session.Folders("user@email.it").Folders("Folder").Folders("SubFolder").Folders("SubFolder").Folders("SubFolder")
现在想通过循环生成的字符串来完成赋值,尝试的代码如下:
Dim CartellaDestinazioneSplit As String 'generated by a loop CartellaDestinazioneSplit = "Session.Folders(\"user@email.it\").Folders(\"Folder\").Folders(\"SubFolder\").Folders(\"SubFolder\").Folders(\"SubFolder\")" Set FldrDest = CartellaDestinazioneSplit
解答:
直接将字符串赋值给Folder变量是不可行的,因为CartellaDestinazioneSplit是字符串类型,而FldrDest是Folder对象类型,VBA不支持直接将字符串形式的代码当作可执行语句赋值。以下是两种可行的实现方式:
方法1:拆分路径并循环遍历Folders集合(推荐)
将路径拆分为单独的节点,从根文件夹开始逐步获取子文件夹,这种方式更安全、易调试:
Dim FldrDest As Folder Dim pathParts() As String Dim currentFldr As Folder Dim i As Integer ' 假设循环生成的路径用分隔符(比如|)拼接,先拆分 pathParts = Split("user@email.it|Folder|SubFolder|SubFolder|SubFolder", "|") ' 从根文件夹开始 Set currentFldr = Session.Folders(pathParts(0)) ' 循环遍历后续子文件夹 For i = 1 To UBound(pathParts) Set currentFldr = currentFldr.Folders(pathParts(i)) Next i Set FldrDest = currentFldr
方法2:使用Eval函数(不推荐)
如果一定要基于字符串形式的代码赋值,可以使用VBA的Eval函数,但注意VBA中字符串内的双引号需要用两个双引号转义(而非反斜杠):
Dim FldrDest As Folder Dim CartellaDestinazioneSplit As String ' 修正双引号转义方式 CartellaDestinazioneSplit = "Session.Folders(""user@email.it"").Folders(""Folder"").Folders(""SubFolder"").Folders(""SubFolder"").Folders(""SubFolder"")" Set FldrDest = Eval(CartellaDestinazioneSplit)
注意:Eval执行字符串代码存在安全风险(若字符串来源不可控),且调试难度高,除非必要不建议使用。
内容的提问来源于stack exchange,提问作者Daniele
相关产品推荐
相关产品推荐

