2015-04-06 19 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。這是否解決了我的問題?它看起來像是在即時窗口中打印字符串的範圍,但不能將它們組合到一個統一的字符串數組中。我錯過了什麼嗎? –

相關問題