试图将一个名为范围的字符串(带空格的文本)的 excel 命名为字符串数组

Posted

技术标签:

【中文标题】试图将一个名为范围的字符串(带空格的文本)的 excel 命名为字符串数组【英文标题】:Trying to convert an excel named range of strings (text with spaces) into a string array 【发布时间】:2015-04-06 19:45:01 【问题描述】:

试图将一个 Excel 命名的字符串范围(带空格的文本)转换为一个字符串数组,以在 Access 数据库查询中使用。基本上,从 excel 中提取名称列表,使用这些名称查询数据库,然后将与这些名称相关的数据返回到 excel。我在这里找到了一些相关的答案:

Excel VBA: Range to String Array in 1 step

但是当我运行循环从变量数组转换为字符串数组时,“sArray”(字符串数组)没有填充。这是我的代码:

Dim theRange As Variant
Dim sArray() As String
Dim i As Long

Application.ScreenUpdating = False
Application.Calculation = -xlCalculationManual
Application.DisplayAlerts = False

activeworksheet = ("Sheet2")

theRange = range("SecurityID").Value
size = UBound(theRange)

For i = 1 To 5
    ReDim sArray(1 To 5)
    sArray(i) = CStr(theRange(i, 1))
Next i

【问题讨论】:

【参考方案1】:

你很亲密。简单的几件事:

Sub test()
    Dim theRange As Variant
    Dim sArray() As String
    Dim i As Long

    Application.ScreenUpdating = False
    Application.Calculation = -xlCalculationManual
    Application.DisplayAlerts = False

    theRange = Sheets("Sheet2").Range("SecurityID").Value

    ReDim sArray(1 To 5)
    For i = 1 To 5
        sArray(i) = CStr(theRange(1, i))
    Next i

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
End Sub
用 Range 指定工作表名称(ActiveWorksheet 是保留术语) 您只需在循环之前重新调整目标数组一次 不需要设置size = UBound(theRange) 不要忘记在最后重新启用屏幕更新、计算和警报

【讨论】:

非常感谢。太棒了。我猜主要问题是“Activeworksheet”任务。【参考方案2】:

有一些小错误。这将适用于 ActiveSheet:

Sub marine()
    Dim theRange As Variant
    Dim sArray() As String
    Dim i As Long
    Range("A1:A5").Name = "SecurityID"
    Application.ScreenUpdating = False
    Application.Calculation = -xlCalculationManual

    'Application.DisplayAlerts = False
    'activeworksheet = ("Sheet2")

    theRange = Range("SecurityID").Value
    Size = UBound(theRange, 1)
    ReDim sArray(1 To Size)
    For i = 1 To Size
        sArray(i) = CStr(theRange(i, 1))
        MsgBox sArray(i)
    Next i
End Sub

【讨论】:

【参考方案3】:
Dim vSecurityID As Variant
Dim lngCounter As Long

vSecurityID = Range("SecurityID").Value

For lngCounter = LBound(vSecurityID) To UBound(vSecurityID)
    Debug.Print vSecurityID(lngCounter, 1)
Next lngCounter

【讨论】:

欢迎来到 Stack Overflow。请添加一些解释为什么此代码有助于 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅How to Answer 了解更多信息。 感谢斯维特的回复。这能解决我的问题吗?看起来它正在调试将字符串范围打印到即时窗口,但没有将它们组合成单个合并的字符串数组。我错过了什么吗?

以上是关于试图将一个名为范围的字符串(带空格的文本)的 excel 命名为字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本或R脚本中参数含有空格的处理方法

Cin 带空格和 ","

如何在 Python 3.10 中的匹配情况下获取带空格的字符串

添加一个双空格作为分隔符

输入到特定长度的填充文本添加空格

带有空格和范围的 MS Access VBA acImport 工作表名称