2015-10-13 4 views
0

Я пытаюсь получить некоторые данные, которые я вводил с другим макросом, в двумерный массив, поэтому я могу применить функцию к этим данным, но независимо от того, что я пытаюсь, я продолжаю получать ошибки , Данные включают в себя строки и номера. Я всегда мог просто ссылаться на ячейки и забывать о массиве, но это усложняет функцию. Вот мой код:Назначение значений двумерному массиву

(Объявления)

Dim nLiens As Byte, nCreditors As Byte 
Dim SecurityV As Currency, ASecurityV As Currency 
Const adjuster = 0.9 

(Соответствующие подлодки)

Public Sub VariableDeclaration() 
    nLiens = InputBox("Enter number of liens in security") 
    nCreditors = InputBox("Enter number of creditors") 
    SecurityV = InputBox("Enter security full value") 
    ASecurityV = adjuster * SecurityV 
Call ODebt 
End Sub 

Sub ODebt() 

' 
'(...) 
' 

Dim oDebt() As Variant 
ReDim oDebt(1 To nCreditors + 1, 1 To nLiens + 1) 
Dim rg As Range 
Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) 
oDebt = rg.Value 

MsgBox (oDebt) 
'>>> ERROR: type mismatch 


Call SAllocation 
End Sub 

Я пробовал другие варианты, такие как настройка содержимого ячейки по ячейке с двумя «Для» петель и LBound и UBound, но ничего не работает.

ответ

1

Вы получаете свою ошибку не во время заполнения, а при отображении массива. Невозможно просто Msgbox массив, так как Msgbox ожидает аргумент String. С другой стороны, вы можете отображать определенные позиции (например, oDebt(1,1)).

Если вы хотите просмотреть все его содержимое, используйте режим отладки и окно Local или распечатайте его в некоторых неиспользуемых ячейках.

+0

Я вижу! Спасибо!! – Migarisa

+0

Если это ответит на ваш вопрос, отметьте его как решение для будущих читателей! – Verzweifler

0

Я хотел бы скопировать значения из таблицы таким образом:

Dim oDebt As Variant 
Dim rg As Range 

Set rg = Range(Cells(1, 1), Cells(nCreditors + 1, nLiens + 1)) 
oDebt = rg ' get data from sheet 
'... do calculations with oDebt array 
rg = oDebt ' put data on sheet 

В словах: вы размерности массива автоматически путем присвоения диапазона. Если вам нужны числовые границы, используйте

nrows = UBound(oDebt, 1) 
ncols = UBound(oDebt, 2) 

Здесь вы видите смысл размерности, а индекс 1 строка, индекс 2 столбцов.

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