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

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

< 1 2 3 >

Автор
Съобщение
phrozencrew
Нед, 27.05.07, 20:00
Здравейте хора. Послушай някой и се напънах да напиша малка статия за Excel, която да може да се публикува официално. Е не я одобриха и за това ще я прасна тук, може да е полезна на някой.

Използване на VBA за създаване на потребителски функции към Excel
----------------------------------------------------------------------------------------------------------------------------------------------------
В този урок ще ви покажа как можете да си пишете собствени функции за Excel. Това доста може да ви улесни живота и намира широко приложение навсякъде където се използва Excel.
За целта на упражнението нека си изберем подходящ обект. Аз избирам да напиша функция която конвертира градуси по Целзий до градуси по Фаренхайт.
   
Формулата за изчисляване е следната:
Tf = (9/5)*Tc+32

Tf - температура по Фаренхайт
Tc - температура по Целзий
   
Да започваме. Отворете си Excel и после натиснете "Alt + F11" или изберете от менютата:
Tools -> Macro -> Visual Basic Editor:
----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
В този момент вероятно ще ви се отвори по долния процорец и трябва да изберете вкарване на нов модул:
----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
Сега трябва да напишем някакви инструкции като спазваме правилата за писане на Visual Basic. Аз не съм голям фен на Visual Basic, а на простичкия VBScript, затова ще използвам неговия синтаксис и няма да обявявам никакви променливи. Тоя мързел го придобих от Perl, но това е друга тема :). За да ми е по лесно ще напиша програма и после ще я коментирам. Копирайте следния код в модула, който създадохме:
Function far(cels)   
 far = (9 / 5) * cels + 32   
End Function

----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
Това е цялата програма. Много кефещо, нали! Тъй като вкарваме допълнителна функция затова и започваме с Function, far() - това е името на функцията, която създаваме, а cels е параметъра който подаваме за обработка на тази функция. Не е задължително да ползвате тези думи, всъщност мисля, че бихте могли и да си напишете думичките на български. Да видим какво се случва с нашия параметър cels.
По формулката по-горе ние ще направим изчислението. Тук е много важно да знаете приоритетите на операторите (= * / + -...) в VBScript, но можете винаги да заобиколите тези приоритети като сложите скоби. Всичко във скоби би изглеждало така:
far = (((9 / 5) * cels) + 32)

Важното е, че скобите въобще няма да затруднят интерпретатора.
Най-накрая задължително затваряме новосъздадената функция с End Function.
Да видим какво може да прави тая тъпня. Върнете в Excel и попълнете едно поле с новосъздадената функция. Примерно:
  
=far(56), което би означавало "конвертирай ми 65 градуса по Целзий в градуси по Фаренхайд"
----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
Надявам се че работи. А защо не пресметнете сойност от други полета. Пример:
----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
Можете да добавите и функция cel() или функция за смятане на валута.
Прилагам Excel-ския файл с макроса тук:
   
http://instr.hit.bg/excel/celsius_farenhaid_converter.xls

Благодаря за вниманието и извинявайте ако ви се е сторила скучна темата!

phrozencrew
Пон, 28.05.07, 13:41
dreven, съгласен съм

Може дори да се свързва с интернет посредством сокетите, да работи с отдалечени бази данни, може да се направи и програма за чертане, стига да се познават необходимите Activex контроли. Но целта на статията ми беше да поднеса по възможно няй-лекия начин информацията и да послужи като едно начало и предизвикателство за хората, които работят с Excel, а все още непознават скритите му страни. Бих могъл да разширя статия с използването на формите, но това би я превърнало в лекция по програмиране с Visual Basic.
Благодаря за мнението!

insecteater
Пон, 28.05.07, 14:26
Ама вие на excel ли се възхищавате или на Visual Basic for Applications?

А може ли да се направи excel-ски файл със сметки и с валута, който автоматично да си обновява курса на валутата от интернет?

дядо_поп
Пон, 28.05.07, 14:40
Их, опустяло, че грешен Дядо Поп вече изпозабравил VB ама инак - да, може да се спретне с обновяване на курсовете от интернет. По чейнчовете наспорил Господ доста вариянти.
phrozencrew
Пон, 28.05.07, 15:01

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

” Ама вие на excel ли се възхищавате или на Visual Basic for Applications?

А може ли да се направи excel-ски файл със сметки и с валута, който автоматично да си обновява курса на валутата от интернет? „

На Excel за сега, защото при него се работи в клетки и е много лесно да структурираш информацията.. Иначе VBA-то си е голяма заигравка.

Относно това за обновяването курса на валутата - да напълно е възможно. Ще ти покажа как най-лесно може да стане. Просто добави тази стандартна библиотека (картинка 1)

Картинка 1
Картинка 1

Прилагам един екселски файл, който чете HTML сорс кода на google.com. Погледни кода на макроса и веднага ще ти светне как става хавата. Искам да допълня, че VBA поддържа и библиотека с регулярни изрази, което означава, че много лесно можеш да извлечеш точната информация от интернет :).
http://instr.hit.bg/excel/Excel-Internet.xls
Кода на google ще се изпише в клетка D6.
Хитро нали!

insecteater
Пон, 28.05.07, 15:07
Хих, благодаря ти от името на останалите, които биха се зарибили да съвместят excell с online получаване на данни.

А пък без регулярни изрази вече не мога да си представя сериозна обработка (в повечето мои случаи - крадене) на текстова информация без тях.

dobrin7
Пон, 24.11.08, 18:38

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

Може ли да се напише функция, която да присвоява стойност на клетка, името на работния лист, където е разположена тази клетка. Нещо като :

Function shen(dd)
dd = Application.ThisSheet.Name
shen = dd
End Function

Само че нямам Thissheet и затова задачката ми се струва невъзможна.

редактиран от dobrin7 на 24.11.08 18:40
phrozencrew
Пон, 24.11.08, 20:33

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

” Може ли да се напише функция, която да присвоява стойност на клетка, името на работния лист, където е разположена тази клетка. Нещо като :

Function shen(dd)
dd = Application.ThisSheet.Name
shen = dd
End Function

Само че нямам Thissheet и затова задачката ми се струва невъзможна. „

Създай нов модул и в него пейстни това:
Function SheetName(rCell As Range, Optional UseAsRef As Boolean) As String
    Application.Volatile
            SheetName = rCell.Parent.Name
End Function

След това се върни в Excel и в някоя клетка(произволна) напиши "=SheetName(A1)".
Предполагам, че ти трябва нещо подобно.

dobrin7
Вто, 25.11.08, 09:56
Здравей phrozencrew,

Много благодаря за бързата реакция!
Пробвах го, както ми го описваш, но вместо името на листа, където стои клетката, функцията ми връща празен резултат?? Каква роля изпълнява израза: Application.Volatile в сорса ти?

phrozencrew
Вто, 25.11.08, 12:57

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

” Здравей phrozencrew,

Много благодаря за бързата реакция!
Пробвах го, както ми го описваш, но вместо името на листа, където стои клетката, функцията ми връща празен резултат?? Каква роля изпълнява израза: Application.Volatile в сорса ти? „

Volatile са функции, които винаги искат преизчисляване. Малко е сложно за обяснение, но се препоръчва, когато пишеш User Defined функции да използваш Application.Volatile като първи ред в тялото на функцията. Ето ти повече инфо:
http://www.dailydoseofexcel.com/archives/2005/04/29/using-volatile-functions/
При мен примера, който съм ти дал работи. Ето ти приложен файл да го пробваш и ти:
Primer_za_SheetName.xls

< 1 2 3 >

Коментар

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