Страница: 1 |
Страница: 1 |
Вопрос: Аргумент функции массив (синтаксис)
Добавлено: 21.06.06 10:07
Автор вопроса:
SvetlanaL | ICQ: 229-356-346
Создала процедуру, которая вызывается в главном модуле и получает n1 - количество выбранных пунктов списка и массив listname1(q) - имена выбранных пунктов списка (процедура работает правильно). Затем вызываю функцию NameList1
с аргументом listname1(), он меня посылает и говорит Subscript out of range.
Текст процедуры:
Sub trans(n1 As Integer, listname1() As String)
Dim Acells() As String
MsgBox (n1)
For q = 0 To n1
MsgBox (listname1(q))
Acells(q) = (listname1())
Next q
End Sub
Текст функции:
Public Function NameList1(listname1() As String)
Dim ArrAdrCeLLs1(10000) As String
With Worksheets(listname1()).Range("a1:w50")
Set c = .find(999999, LookIn:=xlValues)
If Not c Is Nothing Then
firstaddress = c.Address
Do
ArrAdrCeLLs1(i) = c.Address
NameList1 = ArrAdrCeLLs1(i)
i = i + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
End Function
Полагаю, что-то с синтаксисом, подскажите где?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа: Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #1
Добавлено: 21.06.06 11:36
Номер ответа: 2
Автор ответа: SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #2
Добавлено: 21.06.06 12:03
В этом все и дело. Не могу индекс массива передать.
Номер ответа: 3
Автор ответа: Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #3
Добавлено: 21.06.06 12:12
Если ты его знаешь, что мешает вместо:
'...
With Worksheets(ListName1(ЭлементListName1 )).Range("a1:w50"
Номер ответа: 4
Автор ответа: SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #4
Добавлено: 21.06.06 12:19
Делала я так. Дает ту же самую ошибку.
Public Function NameList1(listname1() As String, q As Long)
Dim ArrAdrCeLLs1(10000) As String
With Worksheets(listname1(q)).Range("a1:w50"
Set c = .find(999999, LookIn:=xlValues)
If Not c Is Nothing Then
firstaddress = c.Address
 o
ArrAdrCeLLs1(i) = c.Address
NameList1 = ArrAdrCeLLs1(i)
i = i + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
End Function
Sub trans(n1 As Integer, listname1() As String)
Dim Acells() As String, q As Long
'MsgBox (n1)
For q = 0 To n1
'MsgBox (listname1(q))
Acells(q) = NameList1(listname1(), q)
Next q
End Sub
Номер ответа: 5
Автор ответа: Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #5
Добавлено: 21.06.06 13:02
Возможно следущее:
'MsgBox (listname1(q))
То есть перебор ты нашинаешь с элемента нолик, а нижняя граница массива у тебя единичка. Вот и ошибка. Проверь в твоем массиве:
Dim Acells() As String, q As Long, НижняяГраница As Long, ВерхняяГраница As Long
'MsgBox (n1)
НижняяГраница = LBound(listname1())
ВерхняяГраница = UBound(listname1())
'если НижняяГраница=1 а у тебя For q = 0 - то естественно ошибка! Ставь For q = 1
For q = 0 To n1
'MsgBox (listname1(q))
Acells(q) = NameList1(listname1(), q)
Next q
End Sub
Номер ответа: 6
Автор ответа: SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #6
Добавлено: 21.06.06 13:25
Спасибо. Стало гораздо светлее.
Номер ответа: 7
Автор ответа: SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #7
Добавлено: 21.06.06 14:20
Можно ли передать параметр param из процедуры в основной модуль, не вызывая процедуру в нем (т.е. этот параметр был получен с помощью функции, а процедура уже отработала, например в блоке событий формы ввода).
Основной модуль:
sub OsnMod()
param ?
end sud
Процедура:
sub proc()
param=function()
end sub
Номер ответа: 8
Автор ответа: Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #8
Добавлено: 21.06.06 14:46
Конечно можно. Определяй переменную param на уровне модуля.
Стандартный модуль:
Public Param As Long
'дальше следуют все твои процедуры...
Sub..
Sub...
Sub...
Обявленная таким образом переменная Param будет доступна во всех модулях всех процедур до закрытия проекта (то бишь твоего файлика). Устанавливать и считывать значение такой переменной можно будет из любого модуля. А вот объявлять ее лучше в стандартном модуле.
Номер ответа: 9
Автор ответа: SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #9
Добавлено: 22.06.06 07:37
А значение этого параметра передать можно?
Option Explicit
Public Param As Long
Sub Макрос1()
MsgBox (Param)'Дает 0.
End Sub
Sub proc()
Param = 10
End Sub
Номер ответа: 10
Автор ответа: Незнайка
Вопросов: 7
Ответов: 188
Профиль | | #10
Добавлено: 22.06.06 09:13
Ваша неправда!
Сначала вызываешь