Hagaha VBA Sare ee MS Excel

Haddii aad hadda bilaabayso VBA , markaa waxaad u baahan doontaa inaad bilowdo inaad barato hagahayaga VBA ee bilawga(VBA guide for beginners) . Laakiin haddii aad tahay khabiir VBA ah oo khibrad leh oo aad raadinayso waxyaabo aad u horumarsan oo aad ku samayn karto VBA gudaha Excel , ka dibna sii wad wax akhriska.

Awoodda isticmaalka VBA codeing(VBA) ee Excel waxay furaysaa adduun dhan oo otomaatig ah. Waxaad si otomaatig ah ugu samayn kartaa xisaabinta gudaha Excel , batoonnada riixitaanka, iyo xitaa iimayl u diri kartaa. Waxaa jira fursado badan oo aad ku toosin karto shaqadaada maalinlaha ah ee VBA si ka badan inta aad ogaan karto.

Hagaha sare ee VBA ee Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Hadafka ugu weyn ee code-ka VBA -da ee (VBA)Excel waa in aad ka soo saarto macluumaadka xaashida xisaabaadka, ku samee xisaabaadyo kala duwan, ka dibna natiijada dib ugu qor xaashida xaashida.

Kuwa soo socda ayaa ah isticmaalka ugu badan ee VBA ee Excel .

  • Soo rar(Import) xogta oo samee xisaabinta
  • Xisaabi(Calculate) natiijooyinka isticmaalaha oo riixaya badhanka
  • (Email)Natiijooyinka xisaabinta iimaylka qof

Saddexdan tusaale, waa inaad awood u yeelataa inaad qorto noocyo kala duwan oo ah koodka VBA(Excel VBA) -gaaga sare ee Excel.

Soo dejinta xogta iyo Samaynta Xisaabinta(Importing Data and Performing Calculations)

Mid ka mid ah waxyaabaha ugu badan ee dadku u isticmaalaan Excel waa xisaabinta xogta ka jirta Excel . Haddii aadan isticmaalin VBA , taasi waxay la macno tahay inaad gacanta ku soo dejiso xogta, socodsiiso xisaabinta oo aad soo saartaa qiyamkaas xaashi kale ama warbixin.

VBA - da , waxaad si otomaatig ah uga dhigi kartaa habka oo dhan. Tusaale ahaan, haddii aad haysato fayl cusub oo CSV ah oo lagu soo dejiyo buugga hagaha kombiyuutarkaaga Isniin(Monday) kasta , waxaad u habayn kartaa koodhkaaga VBA -da si uu u shaqeeyo marka ugu horraysa ee aad furto xaashidaada subaxda Talaadada .(Tuesday)

Koodhka soo dejinta ee soo socda ayaa socon doona oo soo dejin doona faylka CSV xaashidaada (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

Fur qalabka tafatirka VBA ee Excel oo dooro shayga (Excel VBA)Sheet1 . Laga soo bilaabo shayga iyo habka sanduuqyada hoos u dhaca, dooro Xaashida shaqada(Worksheet) oo dhaqaaji(Activate) . Tani waxay socodsiin doontaa koodka mar kasta oo aad furto xaashida.

Tani waxay abuuri doontaa shaqo- hoosaadka Worksheet_Activate() (Sub Worksheet_Activate() )Ku dheji koodka sare shaqadaas.

Tani waxay dejinaysaa xaashida shaqada ee firfircoon Sheet1 , nadiifisaa xaashida, waxay ku xirtaa faylka adoo isticmaalaya dariiqa faylka aad ku qeexday doorsoomiyaha strFile , ka dibna Iyadoo(With) loop wareegyada iyada oo loo marayo xariiq kasta oo faylka ah oo dhigaya xogta xaashida ka bilaabma unugga A1 .

Haddii aad socodsiiso koodkan, waxaad arki doontaa in xogta faylka CSV la soo geliyey xaashida faaruqinta, ee Sheet1 .

Soo dejintu waa kaliya tillaabada koowaad. Marka xigta, waxaad dooneysaa inaad u abuurto madax cusub tiirka kaas oo ka koobnaan doona natiijooyinka xisaabintaada. Tusaalahan, aan nidhaahno waxaad doonaysaa inaad xisaabiso 5% cashuurta laga bixiyo iibka shay kasta.

Siday u kala horreeyaan tallaabooyinka koodkaagu waa inuu:

  1. Abuur natiijooyinka cusub ee loo yaqaan cashuuraha(taxes) .
  2. Lasoco cutubyada la iibiyay(units sold) oo xisaabi cashuurta iibka.
  3. Ku qor natiijooyinka xisaabinta safka ku habboon xaashida.

Koodhkan soo socda ayaa fulin doona dhammaan tillaabooyinkan.

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

Koodhkani waxa uu ka helayaa safka ugu dambeeya xaashida xogtaada, ka bacdina waxa uu dejiyaa kala duwanaanta unugyada (tiirka leh qiimaha iibka) marka loo eego safka kowaad iyo kan u dambeeya ee xogta. Kadibna koodku wuxuu dhex maraa mid kasta oo unugyadaas ka mid ah, wuxuu sameeyaa xisaabinta cashuurta wuxuuna natiijada ku qorayaa tiirkaaga cusub (column 5).

Ku dheji summada sare ee VBA -da ee ka hooseeya koodkii hore, oo socodsii qoraalka. Waxaad arki doontaa natiijooyinka oo muujinaya tiirka E.

Hadda, mar kasta oo aad furto xaashidaada Excel , waxay si toos ah u bixi doontaa oo waxay ka heli doontaa nuqulkii ugu dambeeyay ee xogta faylka CSV . Kadib, waxay samayn doontaa xisaabinta waxayna natiijada ku qori doontaa xaashida. Uma baahnid inaad wax gacanta ku qabato!

Natiijooyinka ka soo xisaabi badhanka(Calculate Results From Button Press)

Haddii aad jeclaan lahayd inaad si toos ah u maamusho marka xisaabintu socoto, intii aad si toos ah u shaqayn lahayd marka xaashidu furto, waxaad isticmaali kartaa badhanka kantaroolka.

Badhamada xakamaynta(Control) ayaa faa'iido leh haddii aad rabto inaad xakamayso xisaabaadka la isticmaalo. Tusaale ahaan, isla kiiskan kor ku xusan, ka waran haddii aad rabto inaad isticmaasho heerka canshuurta 5% ee gobol, iyo 7% canshuurta gobol kale?

Waxaad u oggolaan kartaa isla koodka soo dejinta ee CSV inuu si toos ah u shaqeeyo, laakiin ka tag lambarka xisaabinta canshuurta si uu u shaqeeyo marka aad riixdo badhanka ku habboon.

Adigoo isticmaalaya xaashida faafinta ee kor ku qoran, dooro tab horumariyaha , oo ka dooro (Developer)Gelida(Insert) kooxda Xakamaynta(Controls) ee ribbon. Ka dooro badhanka riixitaanka (push button) ActiveX Control ka menu hoos u dhaca.

Ku sawir batoonka riixida qayb kasta oo xaashida ah kana fog meesha ay wax xog ahi aadi doonto.

Midig ku dhufo badhanka riix, oo dooro Properties . Daaqadda Guryaha ,(Properties) u beddel qoraalka qoraalka waxaad jeceshahay inaad u muujiso isticmaalaha. Xaaladdan oo kale waxay noqon kartaa Calculate 5% Tax .

Waxaad arki doontaa qoraalkan oo ka muuqda badhanka riixitaanka laftiisa. Xir daaqada guryaha(properties) , oo laba jeer dhagsi badhanka laftiisa. Tani waxay furi doontaa daaqada tifaftiraha koodka, iyo cursorkaagu wuxuu ahaan doonaa gudaha shaqada socon doonta marka isticmaaluhu uu riixo batoonka riixitaanka.

Ku dheji koodhka xisaabinta cashuuraha ee qaybta sare oo ku dheji shaqadan, adoo ku ilaalinaya tirada korodhka canshuurta 0.05. Xusuusnow inaad ku darto 2 sadar ee soo socda si aad u qeexdo xaashida firfircoon.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Hadda, ku celi habka mar kale, adoo abuuraya badhanka riixida labaad. Samee qoraalkan Calculate 7% Tax .

Laba jeer guji(Double-click) badhankaas oo ku dheji isla koodka, laakiin ka dhig badinta cashuurta 0.07.

Hadda, iyada oo ku xidhan badhanka aad riixdo, tiirka cashuuraha ayaa loo xisaabin doonaa si waafaqsan.

Marka aad dhammayso, waxa aad xaashidaada ku yeelan doontaa labada badhamada riix. Mid kasta oo iyaga ka mid ah ayaa bilaabi doona xisaabin cashuureed oo kala duwan oo waxay ku qori doonaan natiijooyin kala duwan tiirka natiijada. 

Si aad tan u qorto, dooro menu-ka soo-saare, oo dooro Qaabka Nakhshad (Design Mode)ka(Developer) samee kooxda xakamaynta(Controls) ee ribbon si aad u damiso Qaabka Nakhshadda(Design Mode) . Tani waxay kicin doontaa badhamada riixitaanka. 

Isku day inaad doorato badhanka riix kasta si aad u aragto sida tiirka natiijada "canshuurta" isu beddesho.

Natiijooyinka Xisaabinta iimaylka ee qof(Email Calculation Results to Someone)

Maxaa dhacaya haddii aad rabto inaad u dirto natiijooyinka xaashida xaashida qof iimayl ahaan?

Waxaad samayn kartaa badhan kale oo loo yaqaan Email Sheet to Boss adigoo isticmaalaya isla nidaamka kore. Koodhka badhankani waxa uu ku lug yeelan doonaa isticmaalka walaxda Excel CDO si loo habeeyo goobaha iimaylka ee (Excel CDO)SMTP , iyo u dirida natiijooyinka qaab la akhriyi karo isticmaale.

Si aad awood ugu yeelatid habkan, waxaad u baahan tahay inaad doorato Qalabka iyo Tixraaca(Tools and References) . Hoos ugu dhaadhac Microsoft CDO for Windows 2000 Library , awood , oo dooro OK .

Waxaa jira saddex qaybood oo muhiim ah koodka aad u baahan tahay inaad abuurto si aad u dirto iimaylka oo aad u geliso natiijooyinka xaashida.

Midda kowaad waxa ay dejinaysaa doorsoomayaasha si ay u xajistaan ​​mawduuca, Ku noqoshada iyo ka(From) imanaya ciwaanka, iyo jidhka iimaylka.

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."

Dabcan, jidhku wuxuu u baahan yahay inuu noqdo mid firfircoon oo ku xidhan natiijooyinka xaashida ku jira, markaa halkan waxaad u baahan doontaa inaad ku darto loop dhex mara inta u dhaxaysa, soo saarta xogta, oo u qorta xariiq jidhka markiiba.

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

Qaybta xigta waxay ku lug leedahay dejinta SMTP settings si aad email ugu soo diri karto server-kaaga SMTP . Haddii aad isticmaasho Gmail , kani caadi ahaan waa ciwaanka email kaaga, eraygaaga(Gmail) sirta ah ee Gmail , iyo (Gmail)Gmail SMTP server (smtp.gmail.com).

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

Ku beddel [email protected] iyo erayga sirta ah faahfaahinta akoonkaaga.

Ugu dambeyntii, si aad u bilowdo diritaanka iimaylka, geli koodka soo socda.

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

Fiiro gaar(Note) ah: Haddii aad aragto cilad gaadiid marka aad isku deyeyso inaad socodsiiso koodkan, waxay u badan tahay sababtoo ah koontadaada Google ayaa xannibaysa "apps ammaan yar" inay socdaan. Waxaad u baahan doontaa inaad booqato bogga dejinta abka(less secure apps settings page) oo aad daarato sifadan.

Taas ka dib marka la furo, iimaylkaaga ayaa la soo diri doonaa. Tani waa sida ay ugu egtahay qofka hela iimaylka natiijadaada si toos ah loo soo saaray.

Sida aad arki karto waxaa jira wax badan oo aad si toos ah ugu samayn karto Excel VBA . Isku day inaad ku ciyaarto qaybaha koodka ee aad ku baratay maqaalkan oo samee qalabyada VBA(VBA) -da ee gaarka ah.



About the author

Waxaan ahay injineer software leh in ka badan 10 sano oo waayo-aragnimo ah warshadaha software. Waxaan ku takhasusay abuurista iyo ilaalinta codsiyada software shaqsi iyo shirkad, iyo sidoo kale horumarinta qalabka horumarinta ee ganacsiyada yaryar iyo ururada waaweyn. Xirfadahaygu waxay ku jiraan horumarinta codeBase adag, wax ka saarista & qalabka tijaabinta, iyo inaan si dhow ula shaqeeyo isticmaalayaasha dhamaadka si loo hubiyo in codsiyadoodu u shaqeeyaan si aan cillad lahayn.



Related posts