powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Еще раз про макросы Excel из FVP
11 сообщений из 11, страница 1 из 1
Еще раз про макросы Excel из FVP
    #35385420
dval
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой макрос Excel, рисующий диаграмму

Sub Макрос1()
Range("A1:B7").Select
Charts.Add
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:B7"), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Заголовок"
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Characters.Text = "xx"
.Axes(xlSeries).HasTitle = False
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Characters.Text = "zz"
End With
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
End Sub


** VFP5

XLSheet = createobject("Excel.Application")
XLSheet.Visible = .t.
XLSheet.Workbooks.Open('...\книга1.xls')

**В FVP5 от него остается только следующее

XLSheet.Range("A1:B7").Select
XLSheet.Charts.Add
XLSheet.ActiveChart.ChartType = 51
XLSheet.ActiveChart.PlotBy = 2
WITH XLSheet.ActiveChart
.HasTitle = .t.
.ChartTitle.Characters.Text = 'Заголовок'
.Axes(1).HasTitle = .t.
.Axes(1).AxisTitle.Characters.Text = 'xx'
.Axes(2).HasTitle = .t.
.Axes(2).AxisTitle.Characters.Text = 'zz'
ENDWITH

Вопрос
Как оставшиеся строки макроса в VFP записать, чтобы весь макрос выполнить.
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:B7")
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35385718
так и пишите
XLSheet.ActiveChart.SetSourceData Source=XLSheet.Sheets("Лист1").Range("A1:B7")

у Вас есть макрос на VB
и Вы переводите на foxpro

но ведь Вы можете просто позвать макрос

макрос вы можете добавить в созданный объект
командой
Код: plaintext
1.
2.
  
.ActiveWorkBook.VBProject.VBComponents.import (...)

звать макрос нужно так
Код: plaintext
1.
  .run('Макрос1')
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35388375
dval
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы так просто было, не спрашивал бы. Эти три строки просто так не даются. Насчет вызова макроса в курсе, но нежелательно это делать, т.к. XLS-файл у меня создается вновь/
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35389176
dvalЕсли бы так просто было, не спрашивал бы. Эти три строки просто так не даются. Насчет вызова макроса в курсе, но нежелательно это делать, т.к. XLS-файл у меня создается вновь /

Сложно судить о, так сказать "технике исполнения".
Ну, а если подумать в сторону создания XLS-файла - шаблона с макросом и уже на основании его (из Foxa), формировать выходной файл (через Save As), который также будет содержать макрос и через .run('Макрос1') легко и не принужденно его вызывать. Тогда, не нужно будет каждый раз заморачиваться с программным созданием из Foxa макроса при создании XLS-файла.
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35389642
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35391266
dval
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, кто ответил, получилось в итоге следующее

Excel
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:B7")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False

VFP
XLSheet.ActiveChart.SetSourceData(XLSheet.Sheets('Лист1').Range("A1:B7"))
XLSheet.ActiveChart.ApplyDataLabels(2,.F.)
XLSheet.ActiveChart.Location(2,"Лист1")
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35391624
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> XLSheet.ActiveChart.Location(2,"Лист1")

Я категорически против "Лист1". А если у меня английский Excel? А если
китайский?

Есть коллекция книг, у каждой есть коллекция листов. Вот ими и надо
оперировать.

goExcel = CREATEOBJECT("Excel.Application")

loWB=goExcel.WorkBooks.Add() && loWB - полноценная ссылка на вновь созданную
книгу

FOR lnI=1 TO goExcel.WorkBooks.Count()

?'Книга: '+goExcel.WorkBooks(lnI).name


FOR lnJ=1 TO goExcel.WorkBooks(lnI).Sheets.count()

?'Лист: '+goExcel.WorkBooks(lnI).Sheets(lnJ).name

ENDFOR

ENDFOR



** Пример работы со ссылкой loWB. Так же можно сразу определить ссылку на
нужную страницу и работать уже с ней.

?'Книга: '+loWB.name


FOR lnJ=1 TO loWB.Sheets.count()

?'Лист: '+loWB.Sheets(lnJ).name

ENDFOR

Учитесь сразу думать объектами, а не их именами.



PS один программер долго матерился, когда наткнулся на подобную проблему.
Правда проблема была в том, что он нужную книку искал по ее заголовку, а на
одном из компов в свойствах проводника стояло "неотображать расширения
зарегистрированных файлов". Соответственно в заголовке нужной ему книке
отсутствовало 4 буквы ".xls".

Он долго бегал по компам и менял свойства проводника. Когда мне пришлось
"несколько поправить" вывод в эксель (добавились поля) - долго матерился и
многое правил - данную проблему обошел очень просто. Запомнил ссылку на
объек "Книга" в момент ее создания, а не искал ее при необходимости по
заголовку.





PPS - "думать объектами" - подразумеваю, что есть объект, которым вы
оперируете, а уже у него есть свойства, которые вы можете считывать или
записывать (менять). Но никак не наоборот. В данном случае "Лист1" - это
свойство, причем не самое лучшее для ссылки на объект "лист".


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #35395395
авторНасчет вызова макроса в курсе, но нежелательно это делать, т.к. XLS-файл у меня создается вновь


вот пример создания налету и выполнения макроса.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
local loExcel, lcMacros

text to lcMacros noshow pretext  3 
	Sub tt()
	  MsgBox ("cfff")
	End Sub
endtext
strtofile(lcMacros, "c:\new.bas")

loExcel = CREATEOBJECT("Excel.Application")
with loExcel
    .visible = .t.
	.Workbooks.Add()
    .ActiveWorkBook.VBProject.VBComponents.import ("c:\new.bas")
    .run("tt")
endwith


return  
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Еще раз про макросы Excel из FVP
    #36308674
12345вышелзайчикпогулять

вот пример создания налету и выполнения макроса.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
local loExcel, lcMacros

text to lcMacros noshow pretext  3 
	Sub tt()
	  MsgBox ("cfff")
	End Sub
endtext
strtofile(lcMacros, "c:\new.bas")

loExcel = CREATEOBJECT("Excel.Application")
with loExcel
    .visible = .t.
	.Workbooks.Add()
    .ActiveWorkBook.VBProject.VBComponents.import ("c:\new.bas")
    .run("tt")
endwith


return  


У меня выдал ошибку 1943. VBProject - не является объеком. Использую Excel 2007 и VFP9 SP2 (для себя только что открыл, если написать VFP русскими буквами то получиться МАЗ)
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #36308939
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Виталий Васильев

Открываешь Ексель, меню "Сервис" -> "Макрос" -> "Безопастность", Закладка "Надежные издатели" -> поставить птицу
"Доверять доступ к Visual Basic Project"

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Еще раз про макросы Excel из FVP
    #36309027
Спасибо большое!!!! Со вчерашнего ждя голову ломал, чайник же.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Еще раз про макросы Excel из FVP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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