VBA从指定区域生成的动态字符串无法被数组For循环识别如何解决
VBA动态生成字符串无法纳入数组For循环使用问题解决方案
问题根因
代码中的UniqueAccNames是单个字符串类型变量,即使字符串内容包含引号,将其传入Array()函数时,只会生成仅包含1个元素的数组,因此For循环只能遍历到1条内容,无法拆分出每个唯一值。
VBA的Array()函数会将每一个传入参数作为独立数组元素,仅传入单个长字符串时,字符串内部的引号不会被识别为参数分隔符。
最优修正方案
无需通过TextJoin拼接字符串再转数组,Unique工作表函数返回的结果本身就是数组,直接接收后遍历即可:
Option Explicit Dim AccrualFile As Workbook, AccrualSht As Worksheet Dim AccrualFilePath As String ' 定义Variant类型变量接收数组 Dim UniqueArr As Variant Dim Lrows As Long, Lcols As Long Sub Segregation() AccrualFilePath = Application.GetOpenFilename(Title:="Please select Accrual Statement") ' 兼容用户点取消的场景 If AccrualFilePath = "False" Then Exit Sub Set AccrualFile = Workbooks.Open(AccrualFilePath) Set AccrualSht = AccrualFile.Sheets(1) Lrows = AccrualSht.Range("B" & Rows.Count).End(xlUp).Row ' 直接获取Unique返回的数组 UniqueArr = Application.WorksheetFunction.Unique(AccrualSht.Range("B2:B" & Lrows)) Dim i As Long ' 遍历数组,注意Unique返回的是二维数组,需要取第二维下标为1的内容 For i = LBound(UniqueArr) To UBound(UniqueArr) Debug.Print UniqueArr(i, 1) Next End Sub
特殊场景处理
如果确实需要先拼接为字符串再拆分为数组,可使用分隔符拼接后调用Split函数拆分:
' 拼接时用逗号作为分隔符 UniqueNames = Application.WorksheetFunction.TextJoin(",", True, Application.WorksheetFunction.Unique(AccrualSht.Range("B2:B" & Lrows))) ' 按逗号拆分得到数组 myarr = Split(UniqueNames, ",")
内容的提问来源于stack exchange,提问作者mrk777
相关产品推荐
相关产品推荐

