Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > макросы в excel


Автор: Гость_lana 21.6.2005, 13:11
есть макрос, который я назначила пункту меню.

как сделать так, чтобы мой макрос срабатывал для этого
пункта меню на любом другом компьютере где запускается
созданный мной excel файл (этот икселевский файл у меня создается
в результате приложения написанного на java).

Автор: likhobory 21.6.2005, 14:37
при открытии файла присваивай программно макрос пункту меню
Код
Sub Auto_Open()
CommandBars.ActiveMenuBar.Controls(хх).CommandBar.Controls(уу).OnAction = "macros"
End Sub

Автор: Guest 21.6.2005, 15:14
хх - это название пункта меню?
а что такое yy?

Получается что код моего макроса нужно все время перетаскивать на другой компьютер?
а код макроса можно хранить в текстовом файле?

Автор: likhobory 21.6.2005, 15:37
хх - переменные, подставляй реальный № (имя) элемента
например, назначаешь макрос пункту меню "файл->закрыть"
Код
CommandBars.ActiveMenuBar.Controls(1).CommandBar.Controls(3).OnAction = "macros"

код макроса держишь в соотв. модуле документа/шаблона/надстройки

Автор: Guest 21.6.2005, 17:07
спасибо. теперь программно макрос присваивается пункту меню.
но мне почему то еще не особо ясно, где я возьму эти макросы
на другом компе smile

Автор: Любитель 21.6.2005, 19:18
Их засовываешь в сам xls-файл.

Автор: likhobory 21.6.2005, 20:23
Цитата(Guest @ 21.6.2005, 18:07)
теперь программно макрос присваивается пункту меню.

в этом же модуле, где расположен Sub Auto_Open, можешь хранить и макрос

Автор: Гость_lana 22.6.2005, 11:17
Цитата
Их засовываешь в сам xls-файл

в какой файл? тот, что лежит в личной книге макросов или в конкретный файл, который у меня создается?
и где вообще хранится модуль, в котором лежат макросы?

Автор: likhobory 22.6.2005, 11:57
Цитата(Guest @ 21.6.2005, 18:07)
теперь программно макрос присваивается пункту меню.

Цитата
и где вообще хранится модуль, в котором лежат макросы

а где ж ты прописывала код CommandBars.ActiveMenuBar.Controls(1)... ?????????????
smile

Автор: Гость_lana 22.6.2005, 12:07
ну правильно, там я его и прописала, в редакторе visual Basic создала модуль и т.д.
а возможны еще какие то варианты написания макросов?
я это спрашиваю потому, что я не совсем понимаю как я буду создавать этот модуль
программно из своего приложения, написанного на java.
И что означает написать макрос в шаблоне?


Автор: likhobory 22.6.2005, 13:30
Возможные варианты:
1. экспортируй код из bas-файла
Допустим, есть текстовый файл "c:\1.bas" с содержимым:
Цитата
Attribute VB_Name = "MyModule"
Sub Auto_Open()
CommandBars.ActiveMenuBar.Controls(хх).CommandBar.Controls(уу).OnAction = "macros"
End Sub

тогда в коде своего приложения пропиши
Код
Application.ThisWorkbook.VBProject.VBComponents.Import ("c:\1.bas")


2. Создавай модуля "с нуля"
Код
Const vbext_ct_StdModule =1  'стандартный модуль
Const vbext_ct_ClassModule=2 'модуль класса
Const vbext_ct_MSForm=3      'модуль формы

   Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule)
   Application.VBE.CodePanes(1).CodeModule.AddFromString  "Sub Auto_Open()" & vbCrLf & "CommandBars.ActiveMenuBar.Controls(1).CommandBar.Controls(3).OnAction = ""macros"" " & vbCrLf & "End Sub"

только Application замени на свою объекную переменую

Автор: Гость_lana 23.6.2005, 10:50
спасибо большое за объяснения.
теперь я привязываю свои макросы к конкретному файлу.
только вот при открытии данного файла постоянно
срабатывает система безопасности.
какие есть методы борьбы с этим? чтобы система
не ругалась на мои макросы и пользователь даже
не подозревал, что они есть?

Автор: likhobory 23.6.2005, 12:04
на время работы Excel-приложения меняй значения реестра
для officeXP
[HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security]
"Level"=dword:00000001

для office2003 - .....\Office\11.0\Excel.............
для office2000 - .....\Office\Excel.............

Автор: Гость_lana 23.6.2005, 15:29
по ходу у меня возникли еще вопросы smile
мои макросы должны срабатывать только один раз, когда создается иксел файл.
если это файл сохранить под другим названием, то макросы остаются, а этого
мне как раз не надо.

Как можно убить эти макросы при закрытии начального файла?

И если их убить, то пункт меню, для которого писался макрос,
не будет работать. Как вернуть этому пункту меню его начальное
действие?

Автор: likhobory 23.6.2005, 17:26
недопонял, зачем присваивать кнопке макрос, который никогда не будет использоваться ??
если надо изменить некие параметы создаваемого EXCEL-файла (в т.ч. и св-ва пунктов меню), то делай это сразу из родительского приложения smile

Автор: Гость_lana 23.6.2005, 17:32
не, макрос работает один раз, когда у меня создается иксел файл.
после того как я его сохраняю под другим именем, то в нем уже не
должно быть никаких макросов.
вот я вроде нашла способ, чтобы при закрытии макросы исчезали

Sub Aut0_Close()

With ActiveWorkbook.VBProject.VBComponents
.Remove .Item(5)
End With

Sub end

Как будто здесь удаляется модуль и макросы исчезают.
Но вместе с тем в новом документе при использовании
пункта меню(где раньше работал макрос) появляется
предупреждение что такового макроса нет (

Автор: Guest 23.6.2005, 20:14
Цитата
икселевский файл у меня создается
в результате приложения написанного на java

Цитата
есть макрос, который я назначила пункту меню.

Цитата
макрос работает один раз, когда у меня создается иксел файл.

хм, покажи код "одноразового" макроса
и зачем его присваивать пункту меню ??



Автор: Гость_lana 24.6.2005, 09:34
Цитата
и зачем его присваивать пункту меню ??

это я делаю для меню "сохранить как". каким - то чудом
при создании иксел файла в данном пункте по умолчанию
типом файла является "веб архив", а мне нужно -
"книга excel". вот с этой целью и было написано два макроса:

Sub SaveAs()

Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogSaveAs)

With fd

If .Show = -1 Then

.Execute

Else
End If
End With

Set fd = Nothing

End Sub

Sub Auto_Open()

CommandBars.ActiveMenuBar.Controls(1).CommandBar.Controls(5).OnAction = "SaveAs"

End Sub.

И пусть бы работал этот макрос и дальше, но постоянно влезает предупреждение
системы безопасности.
Вот я и пытаюсь с этим как-то бороться.
Пусть бы она хоть один раз предупреждала, но этот файл будет сохранен еще
в n-ом количестве вариантов, и каждый раз при их открытии будет появляться
это предупреждение.

Вот почему я решила чтобы макрос работал только в первый раз. Но это решение
конечно кривое. Но другое мне в голову не приходит smile

Автор: likhobory 24.6.2005, 10:28
Цитата
каким - то чудом
при создании иксел файла в данном пункте по умолчанию
типом файла является "веб архив", а мне нужно -
"книга excel"

а не проще открыть EXCEL и поменять формат по умолчанию:сервис-параметры-переход-сохранять как.... smile
или программно - при создании/сохранении файла
Код
Application.DefaultSaveFormat = xlNormal



Автор: Гость_lana 24.6.2005, 11:55
это было бы значительно удобнее smile
а этот код тоже написать в макрос auto_open или можно как нить без макросов обойтись?
я сейчас написала такой единственный макрос, но в менюшке все равно отображается
вебархив

Автор: likhobory 24.6.2005, 21:27
вариантов - туча, смотри по ситуации, можно так:
Код
Sub Auto_Open()
Application.DefaultSaveFormat = xlNormal
End Sub



Автор: Staruha 25.6.2005, 07:52
Цитата
и зачем его присваивать пункту меню ??

Вот например есть несколько открытых книг. Одна из них отчет. В отчете выбираешь из списка и попадаешь в нужную книгу-нужный лист.Там вносишь изменения,получаешь результат и его надо кинуть в отчет.Что на каждом листе кнопку рисовать? Вот и нужна одна на панели инстументов.
У меня тоже такая ситуация возникла. Sub написала, кнопка на панели работает. И вот встал вопрос как сделать ,что бы кнопка при открытии документов загружалась,а при закрытии -тю-тю.Тогда и на другом компе будет грузиться. smile

Автор: likhobory 25.6.2005, 10:10
трудно не согласиться, но я все же имел в виду данный конкретный случай

Автор: krb 8.7.2008, 00:03
У меня вопрос!!!
Есть Excel таблица с данными(информация о клиенте, даты, суммы и пр.). Нужно вытащить эти данные и поместить их Word документы. Расположение этих данных в Worde различаются.  
Как это сделать???

Автор: kuler 14.5.2010, 16:34
Помогите пожалуйста решить задачи.
Нужно составить макросы в Экселе.

1
Перераспределить значения переменных x и y так, чтобы в x оказалось большее из этих значений, а в y — меньшее 
2
Пусть элементами равностороннего треугольника являются: 1) сторона a; 2) площадь S; 3) высота h; 4) радиус вписанной окружности r; 5) радиус описанной окружности R. Составить программу, которая по заданному номеру и значению соответствующего элемента вычисляла бы значение всех остальных элементов треугольника. 

Буду очень благодарна, если сможете решить! 

Автор: Dmitry0212 19.5.2014, 09:37
Здраствуйте. Помогите поправить задание в контрольной работе по информатике. 
Создан макрос, который считает количество телефонов по введенной марке телефона.

Sub zada4a2()
Sheets("База_данных").Select
    Range("A10").Select
    Selection.Copy
    Sheets("Задача2").Select
    Range("J4").Select
    ActiveSheet.Paste
Selection.Copy
    Sheets("Задача2").Select
    Range("J3").Select
    ActiveSheet.Paste

    Application.CutCopyMode = False
   фирма = InputBox("Введите название фирмы:")
    Range("J4").FormulaR1C1 = фирма

       Range("D7").Value = "Kоличество телефонов фирмы  " & фирма
End Sub

Преподаватель хочет, чтобы название фирмы вводить не вручную, а выбирать из списка уже имеющихся в базе данных.  Не могу сделать такого.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)