Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 15:53   #21
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну вообще-то у меня 2007 нет, может в этом причина, но после конвертера на 2000 в референсах ссылка на этот адрес (соотв. не работает), да и в файлах приложенных Buf_Excel2.vbp и clsExcel_1.exp этот путь отслеживается... Получается, файл надо на конкретной машине настраивать, или это нестыковки конвертера?
После регистрации dll в Excel у меня все заработало. Но вот в самом коде я не разобрался.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 15.05.2010, 01:21   #22
Алексей Трошкин
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию

Да деиствительно регистрировать необходимо на каждой машине. По коду постараюсь прояснить.
В VB6 создем новый проект ActiveX Dll и даем имя проекту clsExcel_1. Создаем класс с именем Cell_Excel . Затем необходимо подключить также и в VB6 ссылку на библиотеку обьектов Excel Microsoft Excel 9.0 (cоответствует Excel 2000) Obiect Libary.У меня подключен был Excel 12.0 поэтому на 2000 и не пошло.
Далее код VB6:
Option Explicit
'Обьявление переменных класса
'Ссылка на вызывающее приложение Excel
Private mxlAPP As Excel.Application
''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''
'Процедуры свойств класса
Public Property Set ExcelApp(ByRef xlapp As Excel.Application)
Set mxlAPP = xlapp
End Property
''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''
'Процедуры обработки событий класса
Public Sub Class_Terminate()
Set mxlAPP = Nothing
End Sub
''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''
'Процедуры методов класса
Public Sub ShowMessage()
'Вызов Msgbox
MsgBox "Hello Excel!"
End Sub
''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''
Public Sub BuferVB()
'Использование буффера обмена Windows
Clipboard.Clear 'очистка буфера перед заполнением
Clipboard.SetText (mxlAPP.ActiveCell.Text) 'помещаем в буфер значение активной ячейки
End Sub
''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''' '
'Переменная mxApp уровня модуля,которая хранит ссылку на обьект Excel Application. DLL- проект будет связываться с Excel с помощью этой ссылки на обьект.
'Процедура свойства ExcelApp, которое будет использоваться обьектом Excel Application, вызывающим DLL-фаил, для предоставлении ссылки на себя.
Далее копилируем DLL- проект. Если открыт Excel со старой ссылкой на DLL то Excel необходимо закрыть.
Затем открыть книгу Excel и набрать данный код.
код VBA:
Sub MsgBoxVB()
'создаем переменную зарегестрированного класс
Dim clsBuf As clsExcel_1.Cell_Excelа clsExcel_1
Set clsBuf = New clsExcel_1.Cell_Excel
Set clsBuf.ExcelApp = Application
clsBuf.ShowMessage ' вызываем процедуру DLL
Set clsBuf = Nothing
End Sub

Sub Буфер_Щелчок()
Dim clsBuf As clsExcel_1.Cell_Excel
Set clsBuf = New clsExcel_1.Cell_Excel
Set clsBuf.ExcelApp = Application
Range("B2").Activate
clsBuf.BuferVB ' вызывае процедуру DLL
Set clsBuf = Nothing
End Sub

В принципе ничего сложного нет. Немногог морока с подключением и перемещением файлов. Созданные DLL-проекты по возможности не перемещать из-за этого начинаются накладки с подключением.

Последний раз редактировалось Алексей Трошкин; 15.05.2010 в 01:26.
Алексей Трошкин вне форума Ответить с цитированием
Старый 16.05.2010, 16:04   #23
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Алексей Трошкин Посмотреть сообщение
Да деиствительно регистрировать необходимо на каждой машине. По коду постараюсь прояснить.
В VB6 создем новый проект ActiveX Dll и даем имя проекту clsExcel_1. Создаем класс с именем Cell_Excel .
Вот из-за классов мне и не понятно пока. Так как объектное программирование я так и не принял, структурное мне гораздо ближе. Но ничего разберемся. Вот только VB6 выкачаю...
Цитата:
Сообщение от Алексей Трошкин Посмотреть сообщение
В принципе ничего сложного нет. Немногог морока с подключением и перемещением файлов. Созданные DLL-проекты по возможности не перемещать из-за этого начинаются накладки с подключением.
Огромное спасибо. На днях буду серьезно разбираться. DLL можно хранить на сетевом диске (хотя эта мысль временами и не нравиться), либо создавать инфраструктуру на каждом компе отдельно (можно при первом запуске или отдельной прогой), а потом просто подменять DLL'шки на новые.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
exel и delphi Demagog БД в Delphi 10 29.10.2009 17:19
Макрос в Exel Tomatos БД в Delphi 1 16.06.2009 17:33
EXEL Artomes Microsoft Office Excel 0 02.11.2008 23:18
Exel MAcK Microsoft Office Excel 1 30.04.2007 15:21