powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с Макросами
13 сообщений из 13, страница 1 из 1
Проблема с Макросами
    #36119989
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, коллеги!

Вот фрагмент кода :

sav_name=........

local loExcel, lcMacros

text to lcMacros noshow pretext 3

Sub Custom_1()
Application.SendKeys "{ENTER}", true

MsgBox (" Save Data ")

Rows("1:1").Select
Selection.ClearContents
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
ActiveWindow.WindowState = xlNormal
Workbooks.Open Filename:="C:\ACP\Reports\_header.xls"
Rows("3:5").Select
Selection.Copy
With ActiveWindow
.Top = 45.25
.Left = 534.25
End With
Windows("tot_repSk.xls").Activate
ActiveWindow.WindowState = xlMaximized
Rows("3:3").Select
Selection.Insert Shift:=xlDown
Rows("5:8").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp

Range("A1").Select
Dim LastRow As Long
LastRow=[A65536].End(xlUp).Row
Range("A5",Cells(LastRow,12)).Select


Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.
.
.
.


End Sub

endtext


strtofile(lcMacros, "c:\acp\Reports\t_r.bas")



loExcel = CREATEOBJECT("Excel.Application")
loExcel.DisplayAlerts = .F.
with loExcel

.visible = .f.
.Workbooks.Open("C:\acp\reports\tot_repSk.xls")
.Sheets("tot_repsk").Select
.ActiveWorkBook.VBProject.VBComponents.import ("c:\acp\Reports\t_r.bas")
.run("Custom_1")
.visible = .t.
.ActiveWorkBook.SaveAS ("&sav_name")


ENDWITH


на рабочих местах с Excel 2002 SP2 все работает нормально,
а с Excel 2002 SP3 - не срабатывает Application.SendKeys "{ENTER}", true
и зависает Excel при сохранении
В чем может быть проблема ?
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120229
Peisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это

Application.SendKeys "{ENTER}"

это зачем вообще?
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120384
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Application.SendKeys "{ENTER}", true для того чтобы в окне MsgBox (" Save Data ") автоматом нажать ""Ок
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120425
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если перед запуском макроса поставить:
.DisplayAlerts=.f.
то запрос не будет выдаваться.
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120448
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это понатно - непонятно другое - почему под SP3 не работает :(
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120488
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima-k5Это понатно - непонятно другое - почему под SP3 не работает :(
Потому что никто вам не обещал, что "потенциально опасные" действия будут работать в будущем. Вы пытаетесь эмулировать действия пользователя.

Вполне естественно, нормальная система не должна вам этого позволить.
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36120626
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну чтож, наверное придется откатываться на SP2 ;(
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36122461
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima-k5ну чтож, наверное придется откатываться на SP2 ;(
Лучше попробуйте объяснить, зачем вы вообще эту команду вызываете? Чтобы закрыть собственный же MsgBox? А зачем?
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36123429
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за активное обсуждение, но да бог с ним - с этим боксом.... Вопрос более существенный - почему подвисает Excel при сохранении документа . Выдается сообщение
"Ошибка OLE, код 0x80010105; The server threw an exception." ?
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36124892
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно тебе надо, макрос программно ваять? Из ФОКСа все эти телодвижения сделать нельзя?
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36125471
dima-k5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык еслиб это мне надо было - то и не парился бы.
А так - такая постановка задачи. И именно такая ! Отчет должен быть сформирован Только в Excel
и разукрашен как новогодняя елка. А т.к. к-во записей от 12 до 40 тисяч - то програмно формировать каждую строчку и форматировать её и разукрашивать есн-но ооочень долго.
А вот через вышепредложенный механизм очень даже быстро. Вот и приходится изворачиваться.....
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36125550
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima-k5Дык еслиб это мне надо было - то и не парился бы.
А так - такая постановка задачи. И именно такая ! Отчет должен быть сформирован Только в Excel
и разукрашен как новогодняя елка. А т.к. к-во записей от 12 до 40 тисяч - то програмно формировать каждую строчку и форматировать её и разукрашивать есн-но ооочень долго.
А вот через вышепредложенный механизм очень даже быстро. Вот и приходится изворачиваться.....
Разукрашивать Excel через OLE можно не намного медленее, чем нативно (через макрос). Excel дольше генерит уникальные структуры стилей, чем применяет форматирование, как через OLE, так и нативно.

А переброска данных... Через массивы в эксель можно забрасывать данные со свистом.
...
Рейтинг: 0 / 0
Проблема с Макросами
    #36125724
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima-k5,

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
USE IN SELECT("CurMain")
CLEAR
lnSeconds = SECONDS()
IF GenTestCursor("CurMain",  3 ,  40000 )
	?"Заполнение курсора", SECONDS()-lnSeconds
	lnSeconds = SECONDS()
	ExportToExcel("CurMain")
	?"Выгрузка в эксель", SECONDS()-lnSeconds
ENDIF

PROCEDURE ExportToExcel
	LPARAMETERS tcCursor
	LOCAL loExcel, loBook, loSheet
	LOCAL lnField, lnFields, laFields( 1 )
	LOCAL lcValue, lcFormat
	PRIVATE laValues ( 1 )
	loExcel = CREATEOBJECT("Excel.Application")
	loBook	= loExcel.Workbooks.Add()
	loSheet	= loBook.Sheets( 1 )
	loSheet.Select()	
	
	lnFields = AFIELDS(laFields, tcCursor)
	FOR lnField =  1  TO lnFields
		STORE "" TO lcValue, lcFormat
		DO CASE
			CASE laFields[lnField,  2 ]=="C"
				lcValue = TEXTMERGE("NVL(<<laFields[lnField, 1]>>, '')")
				lcFormat	= "@"
			CASE laFields[lnField,  2 ]=="D"
				lcValue		= TEXTMERGE("NVL(<<laFields[lnField, 1]>>, {})")
				lcFormat	= "dd/mm/yyyy;@"
			CASE laFields[lnField,  2 ]=="I"
				lcValue		= TEXTMERGE("NVL(<<laFields[lnField, 1]>>, 0)")
				lcFormat	= "0;-0;"
			CASE laFields[lnField,  2 ]=="N"
				lcValue		= TEXTMERGE("NVL(<<laFields[lnField, 1]>>, 0)")
				lcFormat	= "#,##0.00;-#,##0.00;"
		ENDCASE
		IF !EMPTY(lcValue)
			SELECT &lcValue FROM (tcCursor) INTO ARRAY laValues
			loSheet.Cells[ 1 , lnField].Resize[_TALLY,  1 ] = RetArray("laValues")
			IF !EMPTY(lcFormat)
				loSheet.Cells[ 1 , lnField].Resize[_TALLY,  1 ].NumberFormat = lcFormat
			ENDIF
			*?laValues[ 1 ]
		ENDIF
	NEXT lnField
	loExcel.Cells.EntireColumn.AutoFit()
	loExcel.Visible = .T.
ENDPROC && ExportToExcel

PROCEDURE RetArray
	LPARAMETERS tcArrayName
	RETURN @&tcArrayName
ENDPROC

PROCEDURE GenTestCursor
	LPARAMETERS tcCursor, lnColCount, lnRowCount
	IF !USED(tcCursor)
		*-* (IGEL) Генерация макроподстановок
		lcFieldList = ""
		lcValList	= ""
		FOR m.i =  1  TO lnColCount
			lcFieldList	= lcFieldList + IIF(EMPTY(lcFieldList), "", ", ") + ;
				TEXTMERGE([i<<m.i>> I, c<<m.i>> C( 20 ), d<<m.i>> D])
			lcValList	= lcValList + IIF(EMPTY(lcValList), "", ", ") + ;
				TEXTMERGE([FLOOR(RAND()* 100 - 50 ), SYS( 2015 ), DATE() + FLOOR(RAND()* 100 - 50 )])
		ENDFOR
		TEXT TO lcScript TEXTMERGE NOSHOW PRETEXT  7 
			CREATE CURSOR <<tcCursor>> (<<lcFieldList>>)
		ENDTEXT
		&lcScript
		TEXT TO lcScript TEXTMERGE NOSHOW PRETEXT  7 
			INSERT INTO <<tcCursor>> VALUES (<<lcValList>>)
		ENDTEXT
		FOR m.i =  1  TO lnRowCount
			&lcScript
		ENDFOR
	ENDIF
ENDPROC && GenTestCursor

...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с Макросами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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