Напредни ВБА водич за МС Екцел
Ако тек почињете да користите ВБА(VBA) , онда ћете желети да почнете да проучавате наш ВБА водич за почетнике(VBA guide for beginners) . Али ако сте искусни ВБА(VBA) стручњак и тражите напредније ствари које можете да урадите са ВБА(VBA) у Екцел(Excel) -у , наставите да читате.
Могућност коришћења ВБА(VBA) кодирања у Екцел(Excel) -у отвара читав свет аутоматизације. Можете да аутоматизујете прорачуне у Екцел(Excel) -у , дугмад, па чак и да шаљете е-пошту. Постоји више могућности да аутоматизујете свој свакодневни рад са ВБА(VBA) него што мислите.
Напредни ВБА водич за Мицрософт Екцел(Advanced VBA Guide For Microsoft Excel)
Главни циљ писања ВБА(VBA) кода у Екцел(Excel) -у је тако да можете извући информације из табеле, извршити разне прорачуне на њој, а затим резултате записати назад у табелу
Следеће су најчешће употребе ВБА(VBA) у Екцел(Excel) -у .
- Увезите(Import) податке и извршите прорачуне
- Израчунајте(Calculate) резултате када корисник притисне дугме
- Пошаљите(Email) некоме резултате прорачуна е-поштом
Уз ова три примера, требало би да будете у могућности да напишете различите сопствене напредне Екцел ВБА коде(Excel VBA) .
Увоз података и извођење прорачуна(Importing Data and Performing Calculations)
Једна од најчешћих ствари за које људи користе Екцел(Excel) је извођење прорачуна на подацима који постоје изван Екцел(Excel) -а . Ако не користите ВБА(VBA) , то значи да морате ручно да увезете податке, покренете прорачуне и изнесете те вредности на други лист или извештај.
Са ВБА(VBA) , можете аутоматизовати цео процес. На пример, ако имате нову ЦСВ(CSV) датотеку која се преузима у директоријум на рачунару сваког понедељка(Monday) , можете да конфигуришете свој ВБА(VBA) код да се покреће када први пут отворите табелу у уторак(Tuesday) ујутро.
Следећи код за увоз ће се покренути и увести ЦСВ(CSV) датотеку у вашу Екцел(Excel) табелу.
Dim ws As Worksheet, strFile As String Set ws = ActiveWorkbook.Sheets("Sheet1") Cells.ClearContents strFile = “c:\temp\purchases.csv” With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .Refresh End With
Отворите Екцел ВБА(Excel VBA) алат за уређивање и изаберите објекат Схеет1 . (Sheet1)Из падајућих оквира објеката и метода изаберите Радни лист(Worksheet) и Активирај(Activate) . Ово ће покренути код сваки пут када отворите табелу.
Ово ће креирати функцију Суб Ворксхеет_Ацтивате()(Sub Worksheet_Activate() ) . Налепите горњи код у ту функцију.
Ово поставља активни радни лист на Схеет1(Sheet1) , брише лист, повезује се са датотеком користећи путању датотеке коју сте дефинисали променљивом стрФиле(strFile) , а затим петља Витх(With) пролази кроз сваки ред у датотеци и ставља податке у лист почевши од ћелије А1 .
Ако покренете овај код, видећете да су подаци из ЦСВ(CSV) датотеке увезени у вашу празну табелу, у Схеет1(Sheet1) .
Увоз је само први корак. Затим желите да креирате ново заглавље за колону које ће садржати ваше резултате прорачуна. У овом примеру, рецимо да желите да израчунате порез од 5% плаћеног на продају сваке ставке.
Редослед радњи које ваш код треба да предузме је:
- Направите нову колону резултата која се зове порези(taxes) .
- Прођите кроз колону продатих јединица(units sold) и израчунајте порез на промет.
- Запишите резултате израчунавања у одговарајући ред на листу.
Следећи код ће извршити све ове кораке.
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set StartCell = Range("A1")
'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))
rowCounter = 2
Cells(1, 5) = "taxes"
For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell
Овај код проналази последњи ред у вашем листу података, а затим поставља опсег ћелија (колона са продајним ценама) према првом и последњем реду података. Затим код петља кроз сваку од тих ћелија, обавља обрачун пореза и уписује резултате у вашу нову колону (колона 5).
Налепите горњи ВБА(VBA) код испод претходног кода и покрените скрипту. Видећете да се резултати приказују у колони Е.
Сада, сваки пут када отворите свој Екцел(Excel) радни лист, он ће се аутоматски угасити и добити најсвежију копију података из ЦСВ(CSV) датотеке. Затим ће извршити прорачуне и записати резултате на листу. Не морате више ништа да радите ручно!
Израчунајте резултате притиском на дугме(Calculate Results From Button Press)
Ако бисте радије имали директнију контролу над извршавањем прорачуна, уместо да се извршавају аутоматски када се лист отвори, можете користити контролно дугме.
Контролна(Control) дугмад су корисна ако желите да контролишете који се прорачуни користе. На пример, у овом истом случају као горе, шта ако желите да користите пореску стопу од 5% за један регион, а пореску стопу од 7% за други?
Можете дозволити да се исти код за увоз ЦСВ(CSV) -а покреће аутоматски, али оставите код за обрачун пореза да се покреће када притиснете одговарајуће дугме.
Користећи исту табелу као горе, изаберите картицу Девелопер(Developer) и изаберите Инсерт(Insert) из групе Цонтролс(Controls) на траци. Изаберите дугме (push button) АцтивеКс Цонтрол(ActiveX Control) из падајућег менија.
Нацртајте дугме на било који део листа даље од места где ће ићи подаци.
Кликните десним тастером миша на дугме и изаберите Својства(Properties) . У прозору Својства(Properties) промените натпис у оно што желите да прикажете кориснику. У овом случају то може бити Calculate 5% Tax .
Видећете да се овај текст одражава на самом дугмету. Затворите прозор са својствима(properties) и двапут кликните на само дугме. Ово ће отворити прозор уређивача кода, а ваш курсор ће бити унутар функције која ће се покренути када корисник притисне дугме.
Налепите код за обрачун пореза из горњег одељка у ову функцију, задржавајући мултипликатор пореске стопе на 0,05. Не заборавите да укључите следећа 2 реда да бисте дефинисали активни лист.
Dim ws As Worksheet, strFile As String
Set ws = ActiveWorkbook.Sheets("Sheet1")
Сада поновите поступак поново, стварајући друго дугме. Направите натпис Calculate 7% Tax .
Двапут кликните на(Double-click) то дугме и налепите исти код, али направите порески мултипликатор 0,07.
Сада, у зависности које дугме притиснете, колона пореза ће бити израчуната у складу са тим.
Када завршите, имаћете оба дугмета на листу. Сваки од њих ће покренути другачији обрачун пореза и уписати различите резултате у колону резултата.
Да бисте ово послали, изаберите мени за програмере(Developer) и изаберите Режим дизајна(Design Mode) из групе Контроле(Controls) на траци да бисте онемогућили режим дизајна(Design Mode) . Ово ће активирати дугмад.
Покушајте да изаберете свако дугме да бисте видели како се мења колона резултата „порези“.
Пошаљите некоме резултате израчунавања е-поштом(Email Calculation Results to Someone)
Шта ако желите да пошаљете резултате у табели некоме путем е-поште?
Можете креирати још једно дугме под називом Пошаљите листу шефу(Email Sheet to Boss) користећи исту процедуру изнад. Код за ово дугме ће укључивати коришћење Екцел ЦДО(Excel CDO) објекта за конфигурисање поставки СМТП(SMTP) е-поште и слање резултата е-поштом у формату који може да прочита корисник.
Да бисте омогућили ову функцију, потребно је да изаберете Алатке и референце(Tools and References) . Померите се надоле до библиотеке Мицрософт ЦДО за Виндовс 2000(Microsoft CDO for Windows 2000 Library) , омогућите је и изаберите ОК(OK) .
Постоје три главна одељка кода који морате да креирате да бисте послали е-пошту и уградили резултате табеле.
Први је подешавање променљивих за држање предмета, адреса примаоца и пошиљаоца(From) и тела е-поште.
Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."
Наравно, тело треба да буде динамично у зависности од тога који су резултати у табели, тако да ћете овде морати да додате петљу која пролази кроз опсег, издваја податке и уписује ред по ред у тело.
Set StartCell = Range("A1") 'Find Last Row and Column LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4)) rowCounter = 2 strBody = strBody & vbCrLf For Each cell In rng strBody = strBody & vbCrLf strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _ & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "." rowCounter = rowCounter + 1 Next cell
Следећи одељак укључује подешавање СМТП(SMTP) подешавања тако да можете да шаљете е-пошту преко свог СМТП(SMTP) сервера. Ако користите Гмаил(Gmail) , ово је обично ваша Гмаил(Gmail) адреса е-поште, ваша Гмаил(Gmail) лозинка и Гмаил СМТП(Gmail SMTP) сервер (смтп.гмаил.цом).
Set CDO_Mail = CreateObject("CDO.Message") On Error GoTo Error_Handling Set CDO_Config = CreateObject("CDO.Configuration") CDO_Config.Load -1 Set SMTP_Config = CDO_Config.Fields With SMTP_Config .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True .Update End With With CDO_Mail Set .Configuration = CDO_Config End With
Замените [email protected] и лозинку детаљима свог налога.
На крају, да бисте покренули слање е-поште, унесите следећи код.
CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send
Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description
Напомена(Note) : Ако видите грешку у транспорту када покушавате да покренете овај код, вероватно је зато што ваш Гоогле(Google) налог блокира покретање „мање безбедних апликација“. Мораћете да посетите страницу са подешавањима мање безбедних апликација(less secure apps settings page) и УКЉУЧИТЕ ову функцију.
Након што је то омогућено, ваша е-пошта ће бити послата. Овако то изгледа особи која прими вашу аутоматски генерисану е-пошту са резултатима.
Као што видите, постоји много тога што заправо можете аутоматизовати помоћу Екцел ВБА(Excel VBA) . Покушајте да се поиграте са исечцима кода о којима сте сазнали у овом чланку и креирајте сопствене јединствене ВБА(VBA) аутоматизације.
Related posts
Најбољи ВБА водич (за почетнике) који ће вам икада требати
Како направити ВБА макро или скрипту у Екцелу
Водич за све екстензије Екцел датотека и шта оне значе
Како избрисати празне линије у Екцелу
Поправите поруку о грешци МС Оффице „Не могу да проверим лиценцу“.
Користите тастатуру да промените висину реда и ширину колоне у Екцел-у
4 начина да користите квачицу у Екцелу
Како претраживати у Екцел-у
Како уклонити дупле редове у Екцелу
Брзо изговорите бројеве у Ворд-у и Екцел-у
Користите називе динамичког опсега у Екцел-у за флексибилне падајуће листе
Како да поправите #Н/А грешке у Екцел формулама као што је ВЛООКУП
3 начина да поделите ћелију у Екцел-у
Групирајте редове и колоне у Екцел радном листу
Повезивање Екцел-а са МиСКЛ-ом
Како користити Фласх Филл Ин Екцел
Како премештати колоне у Екцелу
Основно сортирање података у једној и више колона у Екцел табелама
Коришћење Екцел-овог алата за тражење циља за анализу шта ако
Како спојити ћелије, колоне и редове у Екцел-у