download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Excel - Собствена функция с VBA

Автор
Съобщение
dobrin7
Вто, 25.11.08, 18:10
Благодаря ти много!
Супер си! И линк-а, който ми подаде е много полезен!
Кодът ти работи - просто съм допуснал една много тъпа грешка.
Отдавна се мъча да направя това с работния лист и си мислех, че е невъзможно, докато не срещнах теб!
kookki
Сря, 14.04.10, 18:41
Нед ,благодаря за урочето ,много е полезно .Имам едно питане към теб. Не съм запознат със скриптове и се чудя дали мога да използвам С++ по подобен начин. Там обаче се декларират променливите и от там не ми е ясно . Всъщност ако пиша в компилатора , знам какво да правя , но ексела как го интерпретира ? По точно какво да променя в кода та да изглежда като VB (нямам предвид примерите ти ,а нещо по-общо), аз ще експериментирам и ще попрочета , но търся стартовата позиция.
Дано да съм се изразил ясно и да си ме разбрал.
boy4o
Сря, 14.04.10, 21:38
Щом си решил да прочетеш самостоятелно нещата, няма да ти развалям удоволствието. Само ще се опитам да ти пусна една муха.
 
Всеки програмен език, който поддържа интерфейс към системните функции на Бозата е в състояние да използва напълно всички възможности на VBS. В това число и на всички програми от M$ Office. Още в Боза 2000 имаше вградена услуга за изпълнение на VBS и JS от външна програма (тук armenxxxxxxxxxx би могъл да се изкаже много по-компетентно).

Във всеки случай, чел съм скриптове на Python и Rubby, които директно извикват определени функционалности на Офиса без изобщо да стартират съответните приложения. А последната версия на Gentee, с която съм запознат нарочно притежава улеснения в този план. Не се съмнявам, че някъде има и библиотека за С++, която предлага такива благинки, но не съм се интересувал специално.

kookki
Сря, 14.04.10, 22:53
Бойчо , благодаря ! Утре ще чета потърся в нета според твоите насоки. Armenxxxxx не се включва в моите питания, така че разчитам на вас.
Иначе с директен код на С++ не става , пробвах.
Точно както в С++ ako НЕ нулирам разни променливи , се получават странни резолтати, така и в ексела. Не ми се ще да се захващам с VB - аз още Си-то не съм научил.......
То аз знам как да си го направя и с ексела , но за по-сложни действия , функцията е много по-прегледна и разбираема.
Все пак се надявам и Недялко да искаже мнение . Пък утре ще си чета.

Edit: ако открия топлата вода ще се похваля

редактиран от kookki на 14.04.10 23:01
anonymous
Чет, 15.04.10, 09:28

RE: Excel - Собствена функция с VBA

Бойчо , благодаря ! Утре ще чета потърся в нета според твоите насоки. Armenxxxxx не се включва в моите питания, така че разчитам на вас.
Иначе с директен код на С++ не става , пробвах.
Точно както в С++ ako НЕ нулирам разни променливи , се получават странни резолтати, така и в ексела. Не ми се ще да се захващам с VB - аз още Си-то не съм научил.......
То аз знам как да си го направя и с ексела , но за по-сложни действия , функцията е много по-прегледна и разбираема.
Все пак се надявам и Недялко да искаже мнение . Пък утре ще си чета.

Edit: ако открия топлата вода ще се похваля „

Е е е я стига когато съм могъл съм писал....

Разгледай в нета за CreateObject("Excel.Application") или по точно линк

.... Excel C++

Всичко зависи от това какво искаш да направиш и какво искаш да постигнеш.

phrozencrew
Чет, 15.04.10, 10:17
Kookki, разбира се, че можеш да разработваш C++ програми за EXCEL, като имаш и доста начини за да го направиш. Ще ти дам 2 идеи:
1. Работиш с COM контроли. Изисква се по-задълбочено познаване на VisualC++. MFC не е задължителен. 3 примера:
Office Automation Using Visual C++
How to automate Excel from C++ without using MFC or #import
How To Build an Add-in (XLL) for Excel Using Visual C++

2. Създаваш си собствена библиотека и в нея си блъскаш всичко, което искаш. Много лесен и практикуван метод. Примерче за VisualC++ има в края на това ръководство:
A brief introduction to C++ and Interfacing with Excel

Интересна дискусия за правене на подобни DLL-и с DEV-C++ :
http://www.wilmott.com/messageview.cfm?catid=10&threadid=72077&STARTPAGE=2
с примера, че да не зачезне
simpleDLL_DevCpp.zip

И 2 интересни теми по тази точка:
Calling DLL Functions from Visual Basic Applications
Exporting from a DLL

kookki
Чет, 15.04.10, 10:36
Ииий ,ще падне четене. Благодаря ви за помоща.
Armenxxxxxxx ,това си беше чиста провокация от моя страна ,за да се включиш. Помагал си ми доста пъти.
Отново БЛАГОДАРЯ и на тримата
phrozencrew
Чет, 15.04.10, 12:23
Към темата трябва да се отблежи и още нещо интересно. Чрез VBA могат да се използват и всички скриптови езици, като Perl, PHP, Ruby, Rebol, Python, JavaScript и т.н. Разбира се за някои от тях има специални инструменти, с които да се създадат библиотеки с функции и ActiveX контроли. Например проекта PerlCtrl. Но всички интерпретируеми езици и конзолни приложения могат да се използват с вграденитe възможности за работа с конзолата във VBA.
За пример сорс код на Perl , който се стартира от VBA:

VBA-Макрос
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Function RunPerl()
    Dim oWsc As Object
    Set oWsc = CreateObject("WScript.Shell")
    Dim oExec As Object
    Set oExec = oWsc.Exec("perl C:\temp\myperl.pl StartParam")
    While oExec.Status <> 1 ' Wait for process
        Sleep 1000
    Wend
    'MsgBox ("STDOUT" + oExec.StdOut.ReadAll()) - чете стандартният изход STDOUT
    'MsgBox ("STDERR" + oExec.StdErr.ReadAll()) - чете стандартният изход за грешки
    
    RunPerl = oExec.StdOut.ReadAll() ' Взимаме резултата върнат от Perl-файла
    
    Set oWsc = Nothing
    'MsgBox ("End of macro")
End Function

Perl-файл запазен в C:\temp\myperl.pl
print "Hello World from perl... Argument[0]: ".$ARGV[0];
die "Error in Perl";

След поставяне на макрото може да се използва директно като вградена функция =RunPerl() в някоя клетка на Excel.

kookki
Чет, 22.04.10, 13:54
Оказах се доста слаб с тия макроси. Правя ендо файлче за изпит по приложен софт и ми се ще линка за сваляне на една програма в документа да е радио бутон в такъв вид

Влизах в скрипт едитора ,но ми се изписва много голям код и не знам какво да го правя. Ако може някой направо да включи каквото там е нужно

От поста поизтрих разрешените въпроси, че беше доста голям

редактиран от kookki на 22.04.10 19:27
редактиран от kookki на 22.04.10 22:29
редактиран от kookki на 22.04.10 22:35
кака.лара
Чет, 22.04.10, 22:03
Не ти работи скрипта, понеже е забранен от опцията за сигурност на Ескела. То си го пише на картинката.

Трябва да свалиш сигурността на макросите на Low. През Tools/General/Macro Virusses Protection.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.