powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Передача приватного опред пользователем массива
16 сообщений из 16, страница 1 из 1
Передача приватного опред пользователем массива
    #36100927
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется множество одинаковых пар листов Excel с идентичным прогр кодом. Естественно, все переменные - private, во избежание конфликта имен. В кодах листов определены массивы определенной пользователем переменной, с кот, кстати, производится операция Redim, т.е. изменяющегося размера. Для управления листом из него создается форма, кот. читает БД и должна писать в этот приватный массив рез-ты запроса к БД.
Вопрос такой, - как передать ссылку на такой приватный массив в форму?
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36100952
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Сейчас делаю это через Public функцию в листе, однако, в этом случае приходится менять прогр код в листах типа ListName.PublicFunction(.......). Т.е. код в листах теряет идентичность.
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101104
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:

в модуле Листа 1
Код: plaintext
1.
2.
Private Function FuncSheet1()
    MsgBox "Hello world!"
End Function

в модуле Листа 2
Код: plaintext
1.
2.
Sub MacroSheet2()
    x = Run("Sheet1.FuncSheet1")
End Sub
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101338
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже так делаю, нмного иначе.
Лист1
Код: plaintext
1.
2.
3.
public sub Sub1()
     debug.print "qwerty"
endSub
Лист2
Код: plaintext
1.
2.
3.
 public sub Sub2
     Sheets("Лист1"). Sub1
end Sub
endSub
В этом случае 2-му листу или форме передается String - имя связанного листа. B т.к. таких (одинаковых) листов много. можно код не менять, а подставлять StringName Во так -

StringName="List1"
Sheets(StringName). Sub1

и выполняется функция нужного листа.

Для массива мне это не нравится, его приходится без конца копировать циклом через функцию и это достаточно тягомотно.
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101378
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA...
Для массива мне это не нравится, его приходится без конца копировать циклом через функцию и это достаточно тягомотно.
Функция или Ваш Sub1 не может вернуть массив?
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101671
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без копирования массива не знаю как.
1. Функция не может возвращать массив.
Далее
Лист1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private DBData() as UserType
sub Sub1(DBData1() as UserType)
......
for i= 0  to N
'Копируем массив в массив
DBData(i).a=DBData(i).a
..........
Next
........
end Sub

Лист2 или Form
Код: plaintext
1.
2.
3.
4.
5.
Private DBDat() as UserType
......
Call ReadDB(DBDat, SQLStr) 'Читает данные из БД в массив
Call Sheets("Лист1").Sub1(DBDat) ' Копирует в массив на др. листе
........

Массивы большие, и копирование занимает много времени.
Нужно организовать ссылку на приватный массив из 1-го листа.
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101683
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строка
Код: plaintext
1.
DBData(i).a=DBData(i).a
Читается как
Код: plaintext
1.
DBData(i).a=DBData1(i).a
Извините за опечатку.
Нужно сразу писать в приватный массив в Sub ReadDB
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101739
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вроде сделал.
List1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
private DBData() as UserType
Private LName as String
........
Call InitForm(LName)
.........
Public Sub ReadDB1(SQlStr as String)
Call ReadDB(SQLStr,DBData)
End Sub
...........
Call InitForm(LName) ' в форму (или другой лист) передается имя листа с массивом
Код в Форме или др. Листе
Код: plaintext
1.
2.
3.
4.
5.
Private ListName as string
Public Sub InitForm(Lname as String)
ListName=Lname
End Sub
.........
Call Sheets("ListName").ReadDB1(SQLSt) ' Читает БД в массив  1 -го листа 




[/SRC]
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36101929
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAбез копирования массива не знаю как.
1. Функция не может возвращать массив.

YUBA, вы это опытным путем определили или прочитали где-то? ;-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private DBData() as UserType
sub Sub1(DBData1() as UserType)
......
for i= 0  to N
'Копируем массив в массив
DBData(i).a=DBData(i).a
..........
Next
........
end Sub
Call Sheets("Лист1").Sub1(DBDat) ' Копирует в массив на др. листе
........
[/quot]

Из обрывков, которые вы показываете трудно извлечь нужную информацию, но у меня подозрение, что ваш код работающий с массивами сильно улучшаем. А какой смысл копировать из массива в массив с помощью цикла, если это все равно запрос SQL? Или у вас там еще какой отсев идет? Массив на другом листе - это диапазон? В Диапазон тоже циклом копируете?
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36103140
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив - это массив. Диапазон - это диапазон. Данные из массива на лист в чистом виде не попадают.
В общем, эта задача уже решена, решение в предыдущем посте.
Кстати покажите, как функция массив может вернуть. Я такого не знаю.
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36103832
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAМассив - это массив. Диапазон - это диапазон. Данные из массива на лист в чистом виде не попадают.
В общем, эта задача уже решена, решение в предыдущем посте.
Кстати покажите, как функция массив может вернуть. Я такого не знаю.

Легко!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Function ReturnArray1()
    ReturnArray1 = Array("jan", "feb", "mar", "apr", "may")
End Function

Function ReturnArray2()
    Dim MyArray( 0  To  3 ) As String
    MyArray( 0 ) = "mon"
    MyArray( 1 ) = "tue"
    MyArray( 2 ) = "wed"
    MyArray( 3 ) = "thu"
    ReturnArray2 = MyArray
End Function

Function ReturnArray3()
    ReturnArray3 = [A1:E1].Value
End Function

Sub testFunctions()
    'Test 1
    For i =  0  To UBound(ReturnArray1)
        MsgBox ReturnArray1(i)
    Next i
    'Test 2
    arrTest = ReturnArray2
    For i =  0  To UBound(arrTest)
        MsgBox arrTest(i)
    Next i
    'Test 3
    [A1:E1].Value = Array( 33 ,  54 ,  66 ,  99 ,  100 )
    For i =  1  To UBound(arrTest)
        MsgBox ReturnArray3( 1 , i)
    Next i
End Sub

И если можно - услуга за услугу: что тогда такое "массив на др листе" и почему он копируется циклом, а не arrData=Range("A1:A10").Value ?
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36103997
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)И если можно - услуга за услугу: что тогда такое "массив на др листе" и почему он копируется циклом, а не arrData=Range("A1:A10").Value ? Спасибо за код. не думал, что такое возможно без указателей.
Массив на др. листе - это просто, м.б. некорректно выразился.
Лист содержит VB код и в нем определен массив, в нашем случае User Defined Type
Private MyArr() as Mytype.
В ячейки листов данные из него попадают после обработки, задаваемой пользователем из формы. Там-же формируется и запрос к БД.
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36106546
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL), что-то не работает, однако
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Option Explicit

Dim X( 10 ) As Double
Dim x1( 10 ) As Double

Sub aa()
X( 0 ) =  0 
X( 1 ) =  1 
X( 2 ) =  2 
X( 3 ) =  3 
X( 4 ) =  4 
X( 5 ) =  5 
X( 6 ) =  6 
X( 7 ) =  7 
X( 8 ) =  8 
X( 9 ) =  9 

x1 = bb(X)
Debug.Print x1( 0 ), x1( 1 ), x2( 2 )
End Sub

Function bb(Y1() As Double) As Variant
bb = Y1
End Function
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36106570
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL), Вот в таком виде все действительно дышит, но д.б. определено через Variant
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Option Explicit

Dim X( 10 ) As Double
Dim x1 As Variant

Sub aa()
X( 0 ) =  222 
X( 1 ) =  223 
X( 2 ) =  224 
x1 = bb(X)
Debug.Print UBound(bb(X))
Debug.Print x1( 0 ), x1( 1 ), x1( 2 )
End Sub

Function bb(Y1() As Double) As Variant
bb = Y1
End Function
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36106572
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так? :-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Dim X( 10 ) As Double
Dim x1

Sub aa()
    X( 0 ) =  0 
    X( 1 ) =  1 
    X( 2 ) =  2 
    X( 3 ) =  3 
    X( 4 ) =  4 
    X( 5 ) =  5 
    X( 6 ) =  6 
    X( 7 ) =  7 
    X( 8 ) =  8 
    X( 9 ) =  9 
    
    x1 = bb(X)
    Debug.Print x1( 0 ), x1( 1 ), x1( 2 )
End Sub

Function bb(Y1() As Double) As Variant
    bb = Y1
End Function
...
Рейтинг: 0 / 0
Передача приватного опред пользователем массива
    #36106574
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через вариант, если присваивать весь массив разом. Если делать перебором, то можно использовать статический массив :-)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Передача приватного опред пользователем массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]