Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/82: Рейтинг темы: голосов - 82, средняя оценка - 4.51
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578

Как сделать DLL для VBA?

19.07.2014, 19:42. Показов 17978. Ответов 106
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что нужно сделать, чтобы сделать DLL?

Я так понимаю, что нужен какой-то язык программирования.
Есть кажется VB6. Если сделать DLL, то в него можно просто поместить VBA-код, в том виде, в каком этот код находится в VBA? Или нужно изменить?

DLL хочу сделать, чтобы скрывать код макроса.

Например, такой код можно будет просто вставить в DLL или надо будет изменить:?
Visual Basic
1
2
3
4
5
6
7
Sub Procedure1()
 
    Dim shActive As Excel.Worksheet
    
    Set shActive = ActiveSheet
 
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2014, 19:42
Ответы с готовыми решениями:

Как создать DLL для VBA
Здравствуйте. Скажите, пожалуйста, как создать dll для VBA. У меня "Visual Studio 2013 Express". В dll хочу вставить такой код:...

Как написать Dll для использования в VBA (MS Access 2003)
Добрый день! По статье сделал Dll: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Как создать правильный DLL для использования в VBA макросе CorelDraw
Есть скрипт на VBA для CorelDraw Нужно спрятать важные процедуры в DLL, написанную в Visual Studio 2017 используя язык VisualBasic.NET....

106
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 21:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Скрипт Посмотреть сообщение
The trick, я не знаю, как это узнать, - нужно гуглить.
Правой кнопкой на EXE -> запустить от имени администратора.
Если VBA запущен с администраторскими правами, то у него есть привилегии писать в реестр, отсюда следует что он может зарегить ActiveX DLL/
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 21:35  [ТС]
Антихакер32, ваш макрос (сообщение #68) не делает регистрации у меня.

В строке с "CreateObject" выдаётся сообщение "ActiveX component can't create object".
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.07.2014, 21:45
Не может быть такого, скорее всего неправильно указан путь
кстати путь должен для Shell быть в двойных кавычках

call Shell("RegSvr32 /s /u ""C:\Моя.dll""")

для второго примера с API, не уверен, я тестил на своей системе
но судя по всему тоже не должно вызывать проблем если все правильно указанно
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 21:45  [ТС]
The trick, у меня Excel запускается не с администраторскими правами.

Сейчас открыл Excel с администраторскими правами и зарегистрировал dll-файл таким образом:
  1. в "C:\Program Files\Microsoft Office\Office15" нашёл "EXCEL.EXE";
  2. щёлкнул по файлу "EXCEL.EXE" правой кнопкой мыши - Открыть от имени администратора. Появилось окно, связанное с контролем учётных записей, я нажал "Да";
  3. в VBA через "References..." подключил dll и произошла автоматически регистрация dll-файла без использования программы "RegSvr32".
0
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 21:48
Цитата Сообщение от Скрипт Посмотреть сообщение
Антихакер32, ваш макрос (сообщение #68) не делает регистрации у меня.
Потому что не стоит пользоваться тем методом. Он банально не проверяет возвращаемое значение и как следствие не предупреждает об ошибке. 2-е посмотрите на прототип функции DllRegisterServer, сколько параметров она принимает? А сколько у него передается? Это хорошо конечно что VB6 ActiveX DLL используется стековый фрейм для параметров и туда можно передать хоть тысячу параметров, но это не всегда так и может быть банальный вылет.
К чему я это - нужно анализировать код, а не тупо копировать. В ближайшее время тот код отправится на доработку.

Добавлено через 29 секунд
Цитата Сообщение от Скрипт Посмотреть сообщение
в VBA через "References..." подключил dll и произошла автоматически регистрация dll-файла без использования программы "RegSvr32".
Что и требовалось доказать.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 21:50  [ТС]
Антихакер32, я подразумевал, что второй пример у меня не работает. Но первый тоже не сработал. Нужно правы дополнительные в "Windows 7".
0
20.07.2014, 21:50

Не по теме:

Цитата Сообщение от The trick Посмотреть сообщение
ближайшее время тот код отправится на доработку.
в ближайшее время я перестану поститься в ваших собственных разделах

0
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 21:52
Скрипт, ты можешь поступить так: отладить у себя эту DLL. Написать приложение (небольшое), которое будет регистрировать твою DLL и запускать (книгу, документ, БД и т.д.). При использовании манифеста и обработкой нужных функций ты сможешь правильно зарегистрировать, в случае неудачи - отменить запуск.
Вот еще вариант. Декларируешь в коде VBA эту DllRegisterServer и вызываешь - в случае удачи (значит библиотека зарегистрирована) CreateObject, иначе пишешь сообщение о невозможности запуска.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 21:55  [ТС]
The trick, в сообщении #85 Вы дали ссылку на C++. Я C++ не знаю, это раздел VBA.
1
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 21:58
Цитата Сообщение от Скрипт Посмотреть сообщение
Вы дали ссылку на C++. Я C++ не знаю, это раздел VBA.
Я дал эту ссылку и дальше полностью расписал для чего я ее дал. Ну могу тебе сказать что там передается явно не 4 как у Антихакера, а 0 параметров.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 22:07  [ТС]
The trick, смысл такой, что в "Windows 7" только пользователь компьютера может разрешить регистрацию dll?
Мне нужно сделать exe-файл, чтобы появилось окно, с помощью которого пользователь зарегистрирует библиотеку с правами администратора?
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.07.2014, 22:10
Вот хорошая статья есть
http://support.microsoft.com/kb/173407/ru

Добавлено через 3 минуты
отрывок того текста
Программный регистрации
Все библиотеки ActiveX DLL, созданные с помощью Visual Basic экспортировать функции Функция DllRegisterServer и DllUnregisterServer. Эти функции может быть объявлен в клиенте Visual Basic и вызывается для регистрации или отмены регистрации DLL ActiveX. Например следующее объявление может использоваться для объявления функции, который может зарегистрировать пользовательские MyServerObject.DLL DLL ActiveX:
Public Declare Function RegMyServerObject Lib _
"MyServerObject.DLL" _
Alias "DllRegisterServer" () As Long

В коде «RegMyServerObject» может быть вызван для регистрации библиотеки DLL:
Call RegMyServerObject
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 22:21  [ТС]
Антихакер32, попробую разобраться в этой статье. Я сегодня раза 3 её читал, но так и не понял. Видимо, надо не читать, а сразу делать, что там написано.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.07.2014, 22:26
Пробовал конечно, работает

Visual Basic
1
2
3
4
5
6
7
8
Private Declare Function dllERR Lib "dllERR.dll" Alias "DllRegisterServer" () As Long
   
Private Sub Form_Load()
 
    ChDir App.Path
    regCode = dllERR()
 
End Sub
0
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 22:32
Цитата Сообщение от Скрипт Посмотреть сообщение
The trick, смысл такой, что в "Windows 7" только пользователь компьютера может разрешить регистрацию dll?
Мне нужно сделать exe-файл, чтобы появилось окно, с помощью которого пользователь зарегистрирует библиотеку с правами администратора?
Тебе можно поступить одним из многих способов. От ручного регистрирования DLL в коде VBA (через Declare), до написания EXE, который будет запрашивать права админа, для этого нужно создать манифест с запросом уровня привилегий requireAdministrator, в таком случае, например под учеткой гостя приложение будет просить пароль админа.

Добавлено через 2 минуты
Цитата Сообщение от Скрипт Посмотреть сообщение
попробую разобраться в этой статье. Я сегодня раза 3 её читал, но так и не понял.
Я тебе еще тут сказал так делать.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 22:32  [ТС]
Антихакер32, в сообщении #94 ничего не понятно.
Что такое "DllRegisterServer"? Зачем Вы выложили этот код? Что Вы хотели им показать?
0
Модератор
10065 / 3910 / 885
Регистрация: 22.02.2013
Сообщений: 5,860
Записей в блоге: 79
20.07.2014, 22:34
Цитата Сообщение от Скрипт Посмотреть сообщение
Что такое "DllRegisterServer"? Зачем Вы выложили этот код? Что Вы хотели им показать?
WTF? Ты вообще читаешь посты которые тебе тут пишут? Какой смысл писать DLL не зная основ? Учи основы.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.07.2014, 22:35
Если внимательно почитать эту тему: Регистрация ActiveX-DLL без прав администратора (UAC включен)
то можно увидеть 3 способа регистрации библиотеки без прав администратора:
1) от меня (ручной способ) сохранение после регистрации ветки HKLM. Подмена HKLM на HKCU. Экспорт в reg-файл. Использование в проекте - через консольную reg import hive.reg
2) от аналитика (с оформлением от Bati4eli) - там готовый EXE для регистрации в ветке HKCU.
3) от Убежденного - cсылка на статью (создание Registration-Free COM).
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
20.07.2014, 22:36  [ТС]
The trick, я VB6 не планирую учить, я только хочу в DLL помещать VBA-код и на этом всё.


Цитата Сообщение от The trick Посмотреть сообщение
WTF?
что такое "WTF"? Я только VBA знаю, больше не знаю про программирование.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.07.2014, 22:36
там если результат regCode не равен нулю
значит ошибка, если 0, то все в порядке либ-зареган
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2014, 22:36

Как сделать надстройку в Visual Basic для VBA?
Помогите, как сделать надстройку в Visual Basic для VBA?

dll для VBA
Доброе время суток. Создаю dll в VB.NET. В нее хочу запихнуть часть кода vba. Но после создания библиотеки не могу ее...

Как сделать библиотеку DLL с моим компонентом видимой для COM?
Я создал компонент, он работает в готовом exe. Я создал DLL и засунул туда этот компонент. Он работает если создавать его из кода (Dim a...

Как сделать обработчик OnClick в библиотеке(dll) для MainMenu?
Разрабатываю приложение, и делаю так что бы большая часть функций приложения загружалась из библиотек. В общем делаю приложение, которое...

DLL для VBA и VB - почему разница в работе?
Доброго дня, читающий. Есть софтина "Полезные расчеты", которая выполняет некую полезную работу. Я написал на VBA под Excel свою...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Закрытая тема Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru