You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将循环生成的字符串赋值给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:58:10