powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Массив
17 сообщений из 17, страница 1 из 1
Массив
    #32311894
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как передать массив в Макрос???


DIMENSION marray(2)
marray(1) = '1'
marray(2) = '2'
OleExcel.Run("massiv",@marray)

Sub massiv(ParamArray my_mas())
a = my_mas(0)
b = my_mas(1) 'ругается что нет элемента массива
...
Рейтинг: 0 / 0
Массив
    #32312218
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил, где я подобную пакость видал:\r
/topic/54598&pg=4#384754
...
Рейтинг: 0 / 0
Массив
    #32312253
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NNN:\r
/topic/54598&pg=4#384754 \r
\r
Причем тута Делфин к Лисе???\r
\r
Мне то надо передать массив из Лисы в Макрос Васика...
...
Рейтинг: 0 / 0
Массив
    #32312267
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передай в макрос просто строку с разделителями, а в макросе создай массив.
...
Рейтинг: 0 / 0
Массив
    #32312320
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lnu:
Передай в макрос просто строку с разделителями, а в макросе создай массив.

Я так и начинал...
А теперь это не вызов макроса... А полный шабаш...

OleExcel.Run("My_macro1",my1,my2,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24)

где
1)my1,my2 - строки из 3-4 параметров
2)v1-v24 - строки по 5 параметров
Из них один параметр Memo-поле

3) надо добавить еще десяток параметров... типа v1-v24

проще передать два массива v1 и v2(осталось узнать как???)
и по очереди их обрабатывать...

А то я уже начинаю путаться где и что надо обрабатывать...
По-мимо этого я подошел к предельному числу параметров...
Можно передать только 27 параметров...

Я может быть и продолжил наполнять имеющиеся...
Так есть еще и глюки с макросом...
Типа в 97 Excel напрочь отсутствуют функции Round и Replace
Я очень был рад когда пришлось их описывать...
Начинаю бояться что б ни че не вылезло(при добавлении параметров)...

Не уж нет выхода???
...
Рейтинг: 0 / 0
Массив
    #32312362
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем столько параметров?

Если надо передать два массива (v1, v2):

В фоксе:

Код: 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.
33.
34.
Array1Size= 24 
Array2Size= 34 
DIMENSION v1(Array1Size, 5 ), v2(Array2Size, 5 )

FOR i=  1  TO Array1Size
FOR j=  1  To  5   
	v1(i,j)='Param'+Alltrim(str(i))+Alltrim(str(j))
ENDFOR 
ENDFOR

FOR i=  1  TO Array2Size
FOR j=  1  To  5   
	v2(i,j)='Par'+Alltrim(str(i))+Alltrim(str(j))
ENDFOR 
ENDFOR 

**Формируем строку

v1String='|'+ALLTRIM(STR(Array1Size))
FOR i= 1  TO Array1Size
FOR j= 1  TO  5  
	v1String=v1String+'|'+v1(i,j)	
ENDFOR 
ENDFOR 
v1String=v1String+'|'

v2String='|'+ALLTRIM(STR(Array2Size))
FOR i= 1  TO Array2Size
FOR j= 1  TO  5  
	v2String=v2String+'|'+v2(i,j)	
ENDFOR 
ENDFOR 
v2String=v2String+'|'
OleExcel.Run( "My_macro1" , v1String, v2String)


в макросе:
'StrToArray ("|1|par11|par12|par13|par14|par15|")
StrToArray (v1String)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub StrToArray(s As String)
NextString =  1 
    n = Val(getText(NextString))
    NextString = NextString +  1 
    Dim arr1( 1 ,  5 ) As String
    ReDim arr1(n,  5 ) As String
    For i =  1  To n
    For j =  1  To  5 
      arr1(i, j) = getText(NextString)
      NextString = NextString +  1 
    Next
    Next
End Sub
Sub m1()

Sub getText(x As Long)
' Надо подобрать функции VB 
'n1 = AT( "|" , s1, x)
'n2 = AT("|", s1, x + 1)
'getText = SUBSTR(s1, n1 +  1 , n2 - n1 -  1 )
End Sub
...
Рейтинг: 0 / 0
Массив
    #32312384
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorProgrammer

> Причем тута Делфин к Лисе???
> Мне то надо передать массив из Лисы в Макрос Васика...


А я-то почему-то подумал, что там пример функции обработки массива на VB..
Ну тогда пробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub massiv(my_mas As Variant)
    Dim i As Integer
    For i = LBound(my_mas) To UBound(my_mas)
        Range( "A"  & i).Select
        ActiveCell.FormulaR1C1 = my_mas(i)
    Next
End Sub
...
Рейтинг: 0 / 0
Массив
    #32312492
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lnu:
Зачем столько параметров?

Наверно недочитал... v1-v24 строковые переменные...
Например:
v1 - 'A1 ' + '1 ' + Memo-поле + '2 ' + 't '

Они обрабатываются приблизительно так-же как выше описано...
Только я отпускаю по 10 символов на 1, 2, 4, 5 параметры
Потом обризаю слева 20 и справа 20... а дальше пошло-поехало

Объединить их я не могу...
так как они содержат Memo-поля... в которых может встретиться любой символ или набор символов...
Очень проблиматично выбрать разделитель между параметрами...
Плюс Memo-поля могут содержать строки более 5000 символов...
Представляешь себе если я их объеденю... какая это строка получится...

А теперь мне надо еще десять таких же строковых параметров...
Если прибавлять с существующим 24... то в один прикрасный момент мкрос просто завалится...

NNN:
А я-то почему-то подумал, что там пример функции обработки массива на VB..
Ну тогда пробуй так:


Как обработать массив для меня не проблема...
Мне надо передать его в Макрос Васика...
...
Рейтинг: 0 / 0
Массив
    #32312514
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorProgrammer

> Как обработать массив для меня не проблема...
> Мне надо передать его в Макрос Васика...


Ну ладно, значит с макросом уже нет проблем? Ах ну да, макрос же еще вчера написали. Ну на всякий случай сохраняем макрос в файле с именем test.xls. Тогда разве такое не работает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LOCAL oleExcel as Object 
DIMENSION marray( 2 )
marray( 1 ) = '1'
marray( 2 ) = '2'
oleExcel=NEWOBJECT('Excel.Application')
oleExcel.Workbooks.Open(FULLPATH('test.xls'))
OleExcel.Run( "massiv" ,@marray)
oleExcel.Visible= .T.
=MESSAGEBOX('Лицезреем Excel')
IF VARTYPE(oleExcel)='O'
	oleExcel.Quit
ENDIF 
RELEASE oleExcel
...
Рейтинг: 0 / 0
Массив
    #32313304
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NNN:

Сенкс...

У меня в макросе было объявлено
Sub massiv(ParamArray my_mas() As Variant)

И приходило только 1 значение макроса...
В чем разница...

Sub massiv(ParamArray my_mas() As Variant)
и
Sub massiv(my_mas As Variant)
...
Рейтинг: 0 / 0
Массив
    #32313332
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужасти какие...
Пример от Aijik
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
DIMENSION Array2Excel( 2 , 4 )

Array2Excel[ 1 , 1 ]= "Шла" 
Array2Excel[ 1 , 2 ]= "Маша" 
Array2Excel[ 1 , 3 ]= "по" 
Array2Excel[ 1 , 4 ]= "шоссе" 
Array2Excel[ 2 , 1 ]= "и" 
Array2Excel[ 2 , 2 ]= "сосала" 
Array2Excel[ 2 , 3 ]= "сушку" 
Array2Excel[ 2 , 4 ]= "!" 


oExcel=CREATEOBJECT( "Excel.Application" )
oExcel.Workbooks.Add()

oExcel.Range( "A12" ).Value = ArrayPasser( "Array2Excel" )

oExcel.Visible=.T.




PROCEDURE ArrayPasser
PARAMETERS lcArrayName


RETURN @&lcArrayName
...
Рейтинг: 0 / 0
Массив
    #32313344
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorProgrammer

Точно не скажу в чем разница, похоже в одном случае в качестве параметра выступает массив с одним значением типа Variant, а в другом переменная типа Variant, которая интерпретируется как массив.

2Crip

А у меня на excel97 ни фига не работает :/
...
Рейтинг: 0 / 0
Массив
    #32313350
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия VFP должна быть не ниже 7...
...
Рейтинг: 0 / 0
Массив
    #32313361
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Crip

8-я подойдет? Кстати, почему?
Кроме "шла" в ексель ничего не улетает.
...
Рейтинг: 0 / 0
Массив
    #32313364
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2NNN
Ну сделай Range по-больше... Range("A1:D2") например...
...
Рейтинг: 0 / 0
Массив
    #32313382
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, прокатила. Спасибо.
...
Рейтинг: 0 / 0
Массив
    #32313387
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передавать массив в COM объект фокс научился только в семерке. Раньше приходилось писать обертку на C++/VB
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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