Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Массив / 17 сообщений из 17, страница 1 из 1
31.10.2003, 14:33
    #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
31.10.2003, 17:24
    #32312218
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
Вспомнил, где я подобную пакость видал:\r
/topic/54598&pg=4#384754
...
Рейтинг: 0 / 0
31.10.2003, 17:44
    #32312253
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
NNN:\r
/topic/54598&pg=4#384754 \r
\r
Причем тута Делфин к Лисе???\r
\r
Мне то надо передать массив из Лисы в Макрос Васика...
...
Рейтинг: 0 / 0
31.10.2003, 17:57
    #32312267
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
Передай в макрос просто строку с разделителями, а в макросе создай массив.
...
Рейтинг: 0 / 0
31.10.2003, 18:58
    #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
31.10.2003, 20:30
    #32312362
lnu
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
31.10.2003, 21:45
    #32312384
NNN
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
01.11.2003, 11:23
    #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
01.11.2003, 12:29
    #32312514
NNN
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
03.11.2003, 12:00
    #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
03.11.2003, 12:14
    #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
03.11.2003, 12:25
    #32313344
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив
2IgorProgrammer

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

2Crip

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

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


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