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

Excel VBA:为QueryTable.TextFileColumnDataTypes赋值变量是否可行?

关于VBA中QueryTables.TextFileColumnDataTypes赋值方式的疑问解答

嘿,这个写法是不正确的哦,我来给你捋清楚问题出在哪,以及怎么改才对:

问题根源

TextFileColumnDataTypes属性要求接收的是一个Variant类型的数组,而你现在把strMyArray定义成了字符串类型,直接将字符串赋值给这个属性会触发类型不匹配的错误——VBA没办法自动把"Array(1,1,1,9)"这样的字符串转换成实际的数组对象。

正确的实现方式

方法1:用Variant变量直接存储数组(推荐)

这是最稳妥、可读性最高的写法,直接把数组赋值给Variant类型的变量,再传递给属性:

Dim arrColumnTypes As Variant
Dim someVariable As Integer ' 这里替换成你的分支判断变量

Select Case someVariable
    Case 1
        arrColumnTypes = Array(1, 1, 1, 9)
    Case 2
        arrColumnTypes = Array(1, 1, 1, 1, 1, 1, 1, 9)
    ' 可以继续添加其他Case分支
End Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFileToOpen, Destination:=Range(rngFirstCell.Address))
    .TextFileColumnDataTypes = arrColumnTypes
End With

方法2:用Eval函数转换字符串(不推荐)

如果一定要用字符串形式存储数组定义,可以借助Eval函数把字符串转换成数组,但这种方式存在安全风险(Eval会执行字符串中的代码),而且可读性差,仅作了解:

Dim strMyArray As String
Dim someVariable As Integer

Select Case someVariable
    Case 1
        strMyArray = "Array(1,1,1,9)"
    Case 2
        strMyArray = "Array(1,1,1,1,1,1,1,9)"
End Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strFileToOpen, Destination:=Range(rngFirstCell.Address))
    .TextFileColumnDataTypes = Eval(strMyArray)
End With

总结

优先选择方法1,直接用Variant变量存储数组,既避免了类型错误,代码也更清晰易维护。

内容的提问来源于stack exchange,提问作者GavinX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:53