尝试将名为range of strings(带空格的文本)的excel转换为字符串数组

时间:2015-04-06 19:45:02

标签: arrays string excel vba variant

尝试将excel命名范围的字符串(带空格的文本)转换为字符串数组,以用于访问数据库查询。基本上,从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

3 个答案:

答案 0 :(得分:0)

有一些小错误。这将适用于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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你非常接近。只是一些简单的事情:

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
  • 使用范围指定工作表名称(ActiveWorksheet是保留字词)
  • 您只需要在循环之前对目标数组进行一次ReDim
  • 无需设置size = UBound(theRange)
  • 不要忘记最后重新启用屏幕更新,计算和提醒