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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2010, 10:42   #1
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию Вызов .dll из макроса

Для ускорения макроса хотел применить вызов функции из .dll.
Написал на C# такой код:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word;

namespace LetterE {
    public static class Class1 {
        public static Int16 ThreeFour(string Слово) {
            Int32 i =  Слово.IndexOf("трех");
            if (i > 0) {
                return (short)(i + 2);
            }
            i = Слово.IndexOf("четырех");
            if (i > 0) {
                return (short)(i + 5);
            }
            return -1;
        }
    }
}
Сохранил его как "Библиотека классов"
Вызов из макроса сделал так:
Код:
Option Explicit
Public Declare Function ТриЧетыре Lib "D:\LetterE.dll" Alias "Class1.ThreeFour" (ByVal Слово As String) As Integer
Sub Test()
    Dim SearchedChar As Integer
    SearchedChar = ТриЧетыре ("Hello, World")
End Sub
VBA даёт ошибку:
Цитата:
Can't find DLL entry point Class1.ThreeFour in D:\LetterE.DLL
В чём ошибка? Подозреваю? что дело в различии типов String в VBA и C#
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 04.08.2010, 11:47   #2
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

может это тебе поможет:
Application.Run Method
Runs a macro or calls a function. This can be used to run a macro written in Visual Basic or the Microsoft Excel macro language, or to run a function in a DLL or XLL.
аналитика вне форума Ответить с цитированием
Старый 04.08.2010, 12:02   #3
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Although Visual Basic code can call a macro directly (without using the Run method), this method is useful when the macro name is stored in a variable
Хотя Visual Basic может вызвать макрос напрямую (без использования метода Run), этот метод используется когда имя макроса хранится в переменной.
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 04.08.2010, 12:11   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Когда пытаюсь добавить свою библиотеку в ссылки "Tools/References/Browse"
VBA даёт сообщение
Цитата:
Can't add a reference to the apecified file
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 04.08.2010, 13:49   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А зачем вам эта DLL?
Вы привели код лишь в качестве примера (хотите в DLL поместить гораздо более сложный код),
или же вот только этот код и собираетесь оставить внутри DLL ?

Если только этот код, то DLL не нужна - подобный код на VBA выполняется моментально, и тормоза однозначно не из-за него.
Или у вас этот код внутри цикла, где он выполняется сотни миллионов раз за один запуск макроса?
EducatedFool вне форума Ответить с цитированием
Старый 04.08.2010, 14:39   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Can't find DLL entry point Class1.ThreeFour in D:\LetterE.DLL
Вот основное.Нет точки входа.Надо писать DLL с открытым интерфейсом.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 04.08.2010, 16:14   #7
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Для EducatedFool:
Конечно, это просто пробная функция для отработки навыков.

Для doober:
Кажется я разобрался. Необходимо создать Win32 DLL, а так как у меня Visual C# Express, который не поддерживает создание Win32 DLL, то я теперь качаю версию Ultimate
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов макроса excel из outlook analyst Microsoft Office Excel 1 10.06.2010 12:32
Вызов макроса Евгений_12 Microsoft Office Excel 6 31.05.2010 07:46
Простой пример вызов DLL из макроса Excel Averinsergey Общие вопросы Delphi 2 05.05.2009 23:12
Вызов функции из dll-ки VVVadim Общие вопросы Delphi 2 28.04.2009 10:37
вызов из dll не ShowModal. Roof Общие вопросы Delphi 7 25.07.2008 15:22