2015-04-06 2 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

большое спасибо. это потрясающе. Я думаю, основной проблемой было назначение «Activeworksheet». –

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

спасибо, как ш ell, это также решает мою проблему. –

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

Добро пожаловать в переполнение стека. Пожалуйста, добавьте некоторое объяснение, почему этот код помогает OP. Это поможет обеспечить ответ, о котором могут узнать будущие зрители. См. [Ответ] для получения дополнительной информации. –

+0

Спасибо за ответ Свет. Это решает мою проблему? Похоже, что это отладочная печать в ближайшее окно диапазона строк, но не объединение их в единый консолидированный массив строк. Я что-то упускаю? –

 Смежные вопросы

  • Нет связанных вопросов^_^