2015-04-06 58 views
0

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

回答

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 
  • 与Range指定表名(ActiveWorksheet是保留术语)
  • 你只需要一次REDIM你的目标数组,你的循环
  • 设置之前,该size = UBound(theRange)是没有必要的
  • 不要忘记在年底重新启用屏幕更新,Calcs(计算),并提醒
+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 
+0

感谢你为w这也解决了我的问题。 –

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 
+0

欢迎来到Stack Overflow。请为此代码添加一些解释来帮助OP。这将有助于提供未来观众可以从中学习的答案。有关更多信息,请参阅[答案]。 –

+0

感谢您的回复Svet。这是否解决了我的问题?它看起来像是在即时窗口中打印字符串的范围,但不能将它们组合到一个统一的字符串数组中。我错过了什么吗? –

相关问题