Всякая мелочь...

Программирование на Visual Basic for Applications
@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Всякая мелочь...

Сообщение @Nik » 21.06.2007 (Чт) 13:20

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

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 21.06.2007 (Чт) 13:25

Как из кода вызывать процедуры, расположенные в надстройке и желательно без указания имени надстройки ?

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 22.06.2007 (Пт) 6:14

@Nik
Подключить надстройку через Tools/Reference
И стандартно, как и любую процедуру (если только нет дубля имён)

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 22.06.2007 (Пт) 9:23

Что-то у меня ничего не получается.... Выдаёт Object required.
Что неправильно я делал:
Открыл Эксель, перешёл в вижуал бейсик, вставл модуль, написал процедуру:
Public Sub Test()
Range("A1")=1
End Sub
Сохранил файл как надстройку, затем в меню "Сервис/Надстройки..." установил флажок напротив появившейся моей надстройки.
Далее, пытаюсь вызвать процедуру Test из модуля другого файла, выдаёт Run-time error '424' Object required. :-) Если перед Test вставить имя модуля, в котором он расположен (имя модуля и процедуры уникальные), затем точка, затем Test - та же самая ошибка. Получилось запустить процедуру только через Run "Test". Если кнопке на панели инструментов назначить макрос Test - тоже работает.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 23.06.2007 (Сб) 18:44

@Nik писал(а):Что-то у меня ничего не получается.... Выдаёт Object required.
Что неправильно я делал:
Открыл Эксель, перешёл в вижуал бейсик, вставл модуль, написал процедуру:
Public Sub Test()
Range("A1")=1
End Sub
Сохранил файл как надстройку, затем в меню "Сервис/Надстройки..." установил флажок напротив появившейся моей надстройки.
Далее, пытаюсь вызвать процедуру Test из модуля другого файла, выдаёт Run-time error '424' Object required. :-) Если перед Test вставить имя модуля, в котором он расположен (имя модуля и процедуры уникальные), затем точка, затем Test - та же самая ошибка. Получилось запустить процедуру только через Run "Test". Если кнопке на панели инструментов назначить макрос Test - тоже работает.


Для этого необходимо создать ссылку на VBAProject твоей надстройки
1) При загруженной надстройке, перейди в VBA Editor
2) Правый клик на имени пректа твоей надстройки, напр. VBAProject (МояНадстройка.xla)
3) Опция VBAProject Properties
4) В графе Project Name поставь что-нибудь более осмысленное, чем VBAProject, напр. "МояНадстройка"
5) Перейди в файл откуда надо вызывать макросы твоей надстройки и создай ссылку поставив галку на проекте МояНадстройка в меню Tools>References...
6) Теперь вызывай твой макрос так:
Код: Выделить всё
Test
Код: Выделить всё
Call Test
Код: Выделить всё
МояНадстройка.Test
Код: Выделить всё
Call МояНадстройка.Test
Привет,
KL

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 16.07.2007 (Пн) 18:07

Подскажите плиз как в ВБА вытащить значения формулы массива...

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 16.07.2007 (Пн) 22:30

@Nik писал(а):Подскажите плиз как в ВБА вытащить значения формулы массива...


Что за формула?
Evaluate() не подходит?
Привет,
KL

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 17.07.2007 (Вт) 9:55

Да в том то и дело, что Evaluate() не подходит...
Вот задача...
Меня спросили: а можно ли сделать так, чтобы при выборе значения из списка посредством Данные/проверка/список... вышевведённые значения не высвечивались в выпадающем списке нижестоящих ячеек... ? Мне столо интересно проверить....
Вот пример, где введённые значения в столбец С исчезают из массива в столбце Д. Значения в столбце С выбираются из столбца А.
Однако, проблема в том, что формулу массива нельзя ввести в проверка/список... да ещё и Evaluate() не хочет считать формулы из столбца Д :-(
Вложения
список.xls
(28.5 Кб) Скачиваний: 106

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.07.2007 (Вт) 16:34

см. пример
Вложения
test.xls
(35 Кб) Скачиваний: 126
Привет,
KL

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 17.07.2007 (Вт) 16:53

Точно - отличное решение ! :thumright: А то я всё вокруг да около... а можно же сделать намного проще.... :) Спасибо.... ;)
Ну ты заметил, что Evaluate() не захотел считать формулу... ? Загнулся :roll:

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 18.07.2007 (Ср) 13:11

@Nik писал(а):Точно - отличное решение ! :thumright: А то я всё вокруг да около... а можно же сделать намного проще.... :) Спасибо.... ;)
Ну ты заметил, что Evaluate() не захотел считать формулу... ? Загнулся :roll:


Потому я и спрашивал какая формула - дело не в Evaluate(). В VBA и XLM некоторые функции утрачивают свою способность работать с массивами.
Привет,
KL

MYF
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 12.05.2006 (Пт) 6:38
Откуда: Череповец

Сообщение MYF » 18.08.2007 (Сб) 19:44

KL, добрый день. Увидел твой ответ 23.06.2007 про надстройки. У меня подобный случай, хотя и не совсем...
В Tools>References включили ссылку Microsoft Excel 9 (это из Office 2000). На странице документа вставили объект "Лист Excel". Ну и дальше накидали кучу скриптов...
А в Office 2003 эта ссылка называестя уже Microsoft Excel 11.0 Object Library. И при открытии документа ругается на то, что он открывает несуществующую ссылку.
Можно как-то сделать "универсальную ссылку"?
Или автоматически создавать её при открытии документа? Тогда придётся и автоматически и объект создавать каждый раз... Но это лучше чем городить кучу версий документов под каждый офис.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 18.08.2007 (Сб) 20:31

Как в Access средствами VBA создать таблицу, содержащую в себе поля OLE с объектами Document Word, в которые в свою очередь вложены таблицы Excel?
И как извлекать данные из ячеек таблиц потом?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 19.08.2007 (Вс) 13:55

MYF писал(а):KL, добрый день. Увидел твой ответ 23.06.2007 про надстройки. У меня подобный случай, хотя и не совсем...
В Tools>References включили ссылку Microsoft Excel 9 (это из Office 2000). На странице документа вставили объект "Лист Excel". Ну и дальше накидали кучу скриптов...
А в Office 2003 эта ссылка называестя уже Microsoft Excel 11.0 Object Library. И при открытии документа ругается на то, что он открывает несуществующую ссылку.
Можно как-то сделать "универсальную ссылку"?
Или автоматически создавать её при открытии документа? Тогда придётся и автоматически и объект создавать каждый раз... Но это лучше чем городить кучу версий документов под каждый офис.


Судя по поведению, "документ" не принадлежит ни Excel ни даже другому приложению Office. Если так, то можешь почитать след. статьи, думаю - они помогут:

Writing Automation clients for multiple Office versions
http://support.microsoft.com/kb/244167/en
INFO: Use DISPID Binding to Automate Office Applications Whenever Possible
http://support.microsoft.com/kb/247579/en
How to create an Excel histogram by using Automation and Analysis ToolPak
http://support.microsoft.com/kb/270844/en
INFO: Type Libraries for Office May Change with New Release
http://support.microsoft.com/kb/224925/en
How to find and use Office object model documentation
http://support.microsoft.com/kb/222101/en
Office Development
http://support.microsoft.com/ofd
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 56

    TopList