You are on page 1of 18
Dung Macro loc dif liéu bang trong Excel Trich www.echip.com.vn Gia str ban cé mét bang chifa danh séch IV Ii sch gi nhud duéi): h nhan vign (hoge bat ctf danh Sheet: a |p C D E E 1|srr|uanv [He Ten Nay sinh [Dia chi 2}1 jossi Meuyén Van A 1507/1973 | 12Neuyén Van Trai, 3|2 |ozse |Pham Th 3 onoarig7e | 1282 Nanyéa Dinh Chidu.. 4}3 fas? tein Van c rsvosrigeg | 4° Hoang Vée Tha, s|4 |oose |nuyabvan |D omosrigi | £6 Nese TH ly lich nhéing nhan vién cé ma s6 0252, 0253, i trong danh sach (cé thé la vai tram dén vai nghin nhan vién) thi sé rat mat thai gian. é thyc hign nhanh, ta sé tao macro loc nhéing nhan vién cAn lay nhu sau: - Tao véng Ip tiy dau téi cuéi cia danh sch ma sé nhan vien, lay ting ma 36 NV, sau dé tao tiép ving lap dé duyét tty dau tdi cudi danh sach ly lich, rim thay thi cho ngifng vong lap va tao tiép mét vong lap khac duyét qua mu tin tim thay dé chép (copy) sang Sheet2. sheet dé chia két qua loc, (Sheet2) + Tao mét sheet chifa ma NV: Sheet3: 1 |sTT | Many 2 1 |os22 3 |2 | 0253 Trong Excel, vao menu Tools\Macro\Visual Basic Editor: Trong cifa sé bén trai, nhain dup vao VBAProject dé bung céc nhénh con trong dé ra. Ban sé thy cé ba sheet ma minh tao trén, nhdin dap vao mot sheet bat ky 4& mé cifa sé soan thao code ciia sheet 6, sau dé thyc hién soan ma nhu 6 du Sub CopyRecord() Dim i, j, k,n, nt As Integer Dim tem ‘'n sé mau tin cua sheet 3 'n1 s6 mau tin cua sheet 1 n= 100 nt = 1500 'vong lap duyét tif mau tin thif 2 dén mau tin cuéi cing cua sheet chifa ma nbn vién(trong vi du 1 100) Fori=2Ton ‘Iu gidi tr] cia hang thf j, c6t thi 2 cila sheet3 vao bién temp (trong vi dy 13 ma NV). ‘nhut vay bién temp sé fn lugt chia m4 s6 nhan vién cla ting nguél cé trong danh sach temp = Sheet3.Cells(j, 2) 'vong lp duyét ti mau tin thif 2 dén mau tin cudi cing cua sheet chua danh sdch nhan vién Forj=2Tont ‘kiém tra néu ma nhan vién trong Sheet1 (danh sach nhan vién) tring véi bién temp thi tao tiép véng lp duyét qua cdc c6t cua mau tin tim thay. If temp = Sheet!.Cells(j, 2) Then k=2 Do While Not IsEmpty(Sheet1.Cells(j, k)) ‘Cap nt cdc 6 vao sheet2 Sheet2. Cells(i, k) = Sheet1.Cells(j, k) k=k+1 Loop Exit For End If Next Next End Sub Sau khi da vit xong code, ta nhdn FS dé chay macro nay, ché vai gidy dé macro I9c dif ligu, sau khi maco thyc hién xong nhiém vy, ban hay mé Sheet2 ra coi. Cha cha! né 48 copy day du theo danh séch ma sé ciia ban. Néu ban muén marco ty déng chay thi thyc hién nhw sau: Macro chay mdi khi ban thay déi dif ligu trong sheet ly lich: Chép doan ma trén (khéng chép hang dau tién va cudi cing: Sub CopyRecord va End Sub). Nhén dup vao Sheet1 dé md cifa sé code, trong listbox bén trai phia trén cua cila sé code, chon Worksheet, bén phai chon Change, ban sé thay nhu sau: Private Sub Worksheet_Change(ByVal Target As Range) End Sub Dan doan ma dé copy vao trong thi tuc nay. Bay gid thi mi dif ligu trong Sheet thi macro sé ty déng cép nhat lai dif ligu. Néu dif ligu qué nhiéu va ban phai lam viéc thuéng xuyén trén Sheet thi khéng nén ding cach nay vi né sé lam cham qué trinh xi ly cua ban (nhé xéa doan ma, Gi sau khi ban da copy né sang sheet khdc). Ban cé thé 4p dung cach nay 4& 6 thé lam dutge nhiéu viée khac nia. [an ban thay déi Ap dung ham SUMPRODUCT 4é tinh DG binh quan gia quyén lién hoan Gia st ta c6 2 Sheet, mdt Sheet la DMMH cé chifa ma MH va cac sé du dau ky. Tai Sheet nay ta dat 3 tén : TonMaMH cho cét chtfa Ma MH, TonDauTG tén dau ky, TonDauSL cho sé lung tén dau ky Sheet thi 2 18 Sheet NhapXuatHH, Sheet nay ding dé nh§p céc dif ligu ve Nh&p Xuat HH phat sinh trong thang het nay ta co cdc ct sau : Cot K la Ma MH, cot M la Sé Luding Nhap, cét N la TGNhap, cét 0 1 SLXuat, cot Q la TGXuat Tai Cell dau tién tinh don gid vén, gia sir 1a Cell KB, ta cé céng thife sau: F(OR(K8="",SUMIF(TonMaMH,K8,TonDauSL)=0),0,SUMIF (TonMaMH,K8,TonDauTG) /SUMIF(TonMaMH,K8,TonDauSL)) Bat dau Cell K9, céng thie sé trd thanh : =IF(K9="",0,(SUMIF(TonMaMH,K9,TonDauTG)+SUMPRODUCT (($K$8:K8=K9)*($N$8:N8- $Q$8:Q8)))/(SUMIF(TonMaMH,K9,TonDauSL)+SUMPRODUCT( ($K$8:K8=K9 )*($M$B8:M8-$0$8:08)))) Mat céch khdc dé rit gon céng thifc la dt tén cho ting doan céng thie nhu sau: Ban dat con tré ngay tai Cell dau tién 4p dung céng thifc, trong File gift len dign dan, téi chon Cell K8 Dat tén cho cdc céng thie sau: SLDuDau = SUMPRODUCT((TonMaMH: TGDuDau = SUMPRODUCT((TonMaMH=" hapXuatHH!$K8)*TonDauSL) hapXuatHH!$K8)*TonDauTG) Céng thifc trong Cell K8 sé tré thanh : =IF(OR(K8="",SLDuDau=0),0,TGDuDau/SLDuDau) Bay gid, ta dt con tré tai Cell K9, va tigp tuc dit tén cho céng thie : SLDuCuoi = SLDuDau+SUMPRODUCT((NhapXuatHH!$K$8: K9 )*(NhapXuatHH!$M$8:M8-NhapXuatHH!$0$8:08)) TGDuCuoi = TEDUDau+SUMPRODUCT( (NhapXuatHH!$K$8:K8=NhapXuatHH! K9 )*(NhapXuatHH!$N$8:N8-NhapXuatHH!$Q$8:Q8)) = NhapXuatHH! Céng thifc tai Cell K9 sé dugc viét thanh : =IF(OR(K9="",SLDuCuoi=0),0,TGDuCuoi/SLDuCuoi) Ty dong Wich ngana di a trong Excel Tran Xun Thién txthientx@fastmail.fm Céng ty may Truéng Giang - Quang Nam Ban dugc giao nhiém vy thuc hién mét biéu dif liéu chi tiét theo dang ban cd ntur nhat ky ching tir. Nhdp liu bang tay cho biéu nay phai ding scroll bar kéo qua kéo lai dé tim cho ding c6t di liéu, vira tn cong vira dé nhim. Chi bang ban ci nhép cdc théng tin can thiét, phn viéc cén lai hay ct dé cho Excel lam gidp, dm bao sé liu chinh xdc 100%. Vi dy, chang ta cé mét mau nhét ky chi tién mat (hinh 1) véi quy wéc nhap ligu 14 nu mét ching tir cé nhiéu tai khoan déi Ging thi nhép trén nhiéu déng khdc nhau nhung cac cét ngay, sé chifng tif va ndi dung phai giéng nhau. Nhiém vy duge chia nhé thanh 3 thi tuc macro dé tién cho viéc bao tri, stfa déi ma Iénh sau nay khi cAn thiét (xin dugc bé qua bud a c&ch tao, Ittu gitf va quan ly module, cdc thao tac nay khd ddn gian). Mot so digm can lu ¥ tru’éc khi trinh bay ma Iénh cua céc thi tue: - Dé gan gia tri cua mét cell vao bién, hay di chuyén dén cell nay va ding thuéc tinh value cua cell hién hanh gan cho bién da khai bao (Bier ctiveCell.Value). Xong cac lénh gan, nhé quay tré vé cell ci trudéc khi di chuyén. = Sif dung dia chi kiéu tong déi khi di chuyén cell bang thugc tinh Offset (Offset(Row, Column). = Ding mét macro thi tu goi fan Iugt 3 macro trén dé hinh thanh mét qua trinh hoan chinh, gan phim tat cho macro nay dé tién sir dung. 1, Trich ngang dif ligu theo tai khoan phat sinh. Trong thu tuc nay, can ctr a khoan tai cét TK, sé tién tuong ting duge theo chiéu n vao cot mang dung sé higu tai Sub TrichNgang() Dim Taikhoan As String Dim ThutuDong, SoCot As Integer Dim Sotien As Long Range("D2").Select Lap dn dang cuéi cua danh séch Do Until ActiveCell.Value = *” Taikhoan = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Sotien = ActiveCell.value Range("F1”).Select SoCot = 2 Thy hign cho dén cét tai khoan cudi cing. Néu tim thay sé higu tai khoan thi dién'sé tién 1én déng trén cling cia chifng tif va thoat ving Ip. Do Until ActiveCell.Value = *” If ActiveCell. Value = Taikhoan Then ActiveCell.Offset(ThutuDong + 1, 0).Range("A1”).Select ActiveCell.Value = Sotien Exit Do Else ActiveCell.Offset(0, 1).Range("A1”).Select End If SoCot = SoCot + 1 Loop Trudng hgp khéng tim thay tai khoan thi dién sé higu tal khoan vao cét cudi cling va dién sé tién vao ding dang dau tién cua chiing ti. Bang khéng dai con tré xuéng dau dang dudi va thém thi ty déng 1 dan vi. If ActiveCell.Value = *” Then ActiveCell. Value = Taikhoan ActiveCell.Offset(ThutuDong + 1, 0).Range(“A1”).Select ActiveCell.Value = Sotien End If ActiveCell.Offset(1, -SoCot).Range("A1”).Select ThutuDong = ThutuDong + 1 Loop End Sub 2. Mang sé tién tit céc ding dui céng vao ding dau déi véi nhiing ching tir cé hon mét dang phat sinh. Déi véi mét ching tu chi déi ting voi nhieu tai khoan, ban phai céng dén sé tién ciia titng tai khoan vao cét téng cong va trich ngang sé tién nay vao cdc tai khoan tudng ting trén cling mat dang. ‘Sub CungCTu() Dim Ngay, Ngay2 As Date Dim Chungtu, Chungtu2, Taikhoan, Taikhoan2, Noidung, Noidung2 As String Dim ThutuDong, SoCot, SoDong As Integer Dim Sotien, Sotien2 As Long Lap dén déng cuéi cua danh séch Range("A2”).Select Ngay = ActiveCell. Value ActiveCell.Offset(0, 1).Range("A1’ Select Chungtu = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Noidung = ActiveCell.value ActiveCell.Offset(0, 1).Range("A1”).Select Taikhoan = ActiveCell.Value ActiveCell.Offset(1, -3).Range("A1”).Select Luu cae dif ligu cn thiét vao bi . Lap cho d8n ding cudi cua danh sch Do Until ActiveCell.Value = “” Ngay2 = ActiveCell.value ActiveCell.Offset(0, 1).Range("A1”).Select Chungtu2 = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Noidung2 = ActiveCell.Value If Ngay = Ngay2 And Chungtu = Chungtu2 And Noidung = Noidung2 Then SoDong = SoDong + 1 ActiveCell.Offset(0, -2).Range("A1”).Select ThutuDong = ThutuDong + 1 ActiveCell.Offset(0, 3).Range("A1”).Select Tal hoan2 = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Sotien2 = ActiveCell. jalue Range("E1”).Select SoCot = 5 Lap dén cét tai khoan cudi cing. Néu tim thay so tién cdc déng duéi én dng trén ciing cua ching ti, u tai khoan thi céng sé r6i thoat vong Ip. Do Until ActiveCell.Value = *” If ActiveCell.Value = Taikhoan2 Then ActiveCell.Offset(ThutuDong - SoDong + 1, 0).Range("A1”).Select ActiveCell. Value = Sotien2 ActiveCell.Offset(0, -SoCot + 5).Range("A1”).Select ActiveCell. Value = ActiveCell.Value + Sotien2 Exit Do Else ActiveCell.Offset(0, 1).Range("A1”).Select End If SoCot = SoCot +1 Loop ActiveCell.Offset(1, -4).Range("A1”).Select Else SoDong = 0 ActiveCell.Offset(0, -2).Range("A1”).Select ThutuDong = ThutuDong + 1 End If Luu gid céc gid tri n tai dé tigp tuc so sdnh trong ving lap Ngay = Ngay2 Chungtu = Chungtu2 Noidung = Noidung2 ActiveCell.Offset(1, 0).Range("A1”).Select Néu mét chiing ti ¢6 nhiéu ding, phai dai con tré dén ding ding cudi. If SoDong > 1 Then ActiveCell.Offset(SoDong - 1, 0).Range("A1”).Select End If Loop End Sub 3. Xéa cae dong thifa (déng thi hai trd di) & nhiing ching tiv c6 nhiéu tai khoan déi ting, déng thdi xda cét TK (tai khoan). ‘Sub XoaDong() Dim Ngay, Ngay2 As Date Dim Chungtu, Chungtu2, Noidung, Noidung2 As String Luu gid cdc gid tr] & déng dau dé so sanh trong véng lap. Range("A2”).Select Ngay = ActiveCell. Value ActiveCell.Offset(0, 1).Range("A1”).Select Chungtu = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Noidung = ActiveCell.Value ActiveCell.Offset(1, -2).Range("A1”, So sanh [an lugt ding trén véi ding dui, néu xc dinh la tring nhau thi xéa céc dang thita phia duéi Do Until ActiveCell.Value = *” Ngay2 = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1”).Select Chungtu2 = ActiveCell. Value ActiveCell.Offset(0, 1).Range("A1”).Select Noidung2 = ActiveCell.Value ActiveCell.Offset(0, -2).Range("A1”).Select If Ngay = Ngay2 And Chungtu = Chungtu2 And Noidung = Noidung2 Then Selection.EntireRow.Delete ActiveCell.Offset(-1, 0).Range("A1”).Select Else End If Ngay = Ngay2 Chungtu = Chungtu2 Noidung = Noidung2 ActiveCell.Offset(1, 0).Range("A1”).Select Loop Xéa cét sé higu tai khoan (TK) Columns("D:D").Select Selection.Delete Shift:=xIToLeft Range("A1”).Select ‘TAO MENU NGUOT DUNG TRONG EXCEL (Banh cho ngudi da biét cén ban Visual Basic For Application) Khi ban tao mét ting dung trong excel, dé cung cap viée dé dang thao tac cho ngudi ding ban phai tao mét menu riéng. Téi xin gidi thiu cing céc ban mét cach dé tao menu riéng nay. Mé6t menu bao gdm menu cap 1 (Menu), menu cap hai (Menu Item), menu cap ba (Sub Menu Item). Hinh 1 duéi day thé hién cdc c&p menu ma téi via néu tran. Cch giai quyét 18 menu nay dugc goi khi mét tgp tin excel nay duge ma ra va menu nay duge gd bé khi tap tin excel nay duge déng lai. é cho viéc tao menu nay duge linh dng, tifc 1a ban cé thé thém bét, chinh sifa dé dang thi tdi tao mét bang di ligu nam trén mét sheet lam nguén cho thd tuc téi viét 4é tao ra menu. Bang di ligu cua téi gém cé 5 cét (Column) dai dign cho 5 trudng (field). Céc trudng cy thé dé Ia: Cap menu (level) nhur t6i 43 gidi thich 4 trén; Dau 4@ (caption) cua cp menu. Cac ban chi y 6 day ky ty & ditng truéc ky tu nao trong dau dé thi ky ty 46 s8 duge gach dud (phim néng); Vi tri hay tén macro can thyc hign (position/macro) vi tri véi menu cap mét, tan macro can thyc hign déi véi menu cap hai hay cap ba. Lan ngan céch (divider), néu ban cho bing true thi truéc menu dé sé cé lan ngan cach giéng nhu hinh trén. FaceID sé nguyén dai dién cho hinh biéu dién cua menu 6. Dé biét duge s6 nguyén nao dai dign cho hinh gi ban cé thé download va ding tp tin add-in faceids.xla. Sau day la cdc thi tuc dé tao va xod menu (ban nén cho vao module). Ban cha ¥ tén sheet chifa dif liéu dé tao menu cua ban cé tén [a Menusheet. cod Sub CreateMe! uO " Tha tuc nay thy hign khi workbook ch " MenuSheet As Worksheet Yim Menu0) CommandBarPopup Menurtem As Obj) Dim SubMenultem As ConmandBarB Dim Row As Integer Dim MenuLevel, NextLevel, PositionOr exe, Caption, Divider, Faceld ' chi ra Sheet cho men} k.Sheets ("Men Set Menusheet Sheet”) ' wham chdc chai call DeleteMenu ' Khéi tao gid tri cla hang ddu tién Row = 2 ' Thém vao menu, menu items va submenu items st dung ' do 11@u duge Iuu trong Menusheet Do Until IsEmpty (Menusheet.Cells (Row, 1)) with Menusheet MenuLevel = .Celis(Row, 1) Caption = .Celis(Row, 2) PositionOrMacro = .Celis(Row, 3) Divider = .Cells(Row, 4) Faceld = .Celis(Row, 5) NextLevel = .Celis (Row + 1, 1) End With Select Case MenuLevel case 1 ' Menu "dua Menu mic cao nhdt vao florksheet CommandBar Set MenuObject = Application.CommandBars (1). Controls.Add (Type:=msoControlPopup, ?Before: Tenporary:=True) MenuObject.Caption = Caption Case 2 ' Menu Item If Nexthevel = 3 Then Set MenuItem ~ MenuObject .Controls.Add (Type: ~msoContro1Popup) Else Set MenuItem = MenuObject.Controls. Add (Type: MenuItem.OnAction ~ PositionOrMacro End If Menultem.Caption = Caption If Faceld <> "" Then Menurtem.FaceTd = Faceld Tf Divider Then MenuTtem.BeginGroup = True case 3 ' SubMenu Item Set SubMenultem = MenuItem. Controls. Add (Type SubMenuTtem. Caption = Caption SubMenuItem.OnAction ~ PositionOrMacro If Faceld <> "" Then SubMenuItem.FaceId = FaceId If Divider Then SubMenuTtem.BeginGroup = True End Select Row = Row + 1 Loop End Sub PositionOrMacro, msoControlButton) isoControlButton) Sub DeleteMenu() "Tho tue nay sé thyc hign khi workbook duge déng lai ' Xéa Menu Dim MenuSheet As Worksheet Dim Row As Integer Dim Caption As String On Error Resume Next Set MenuSheet ~ ThisWorkbook. Sheets ("Menusheet") Row = 2 Do Until Isimpty (MenuSheet.Cells (Row, 1)) If MenuSheet.Celis(Row, 1) = 1 Then caption = MenuSheet.Cells (Row, 2) Application.ConmandBars (1) .Controls (Caption) .Delet @ myMacro() "Bay ch tue nay khong 1 va xod menu ban goi cdc thi tuc trén khi sy kién Open va BeforeClose xay ra. Private Sub Workbook_Open() Call CreateMenu MsgBox "A new menu (MyMenu) was created.", vbInformation End Sub Private Sub Workbook BeforeClose (Cancel As Boolean) End Sub Luge dich ti internet. Lé Van Duyét Chic cc ban thanh céng. Hy vong bai nao. t trén sé gilip ich cc ban phan C4ch thy hign tao Menu 1/ Céc ban hay Insert vao File cua minh mt Sheet méi va at tén [a MenuSheet. ~ C6t Level néi vé cp 48 cua menu (sé 1 la cp cao nhat sé thé hign trén thanh Toolbar, sé 2 18 c&p d menu con cua 1, va sé 3 thé hién céc menu con cua cp 2) - Cét Caption 1a tén cua céc Menu ma ban muén dat - Cét Position /Macro la tén cdc Macro danh cho Menu cia céc ban - C6t Divider : néu ban nh§p chit TRUE sé cé lan phan cach gitfa céc Menu - C6t FaceID : Néu ban nhap ham ngau nhién, sé cé nhiing hinh minh hoa, v6i céc hinh Face ID dug cai trong may cua ban, néu ban dé trong thi trén thanh Menu ciia ban sé khéng cé hinh. 2/Céc ban vao cua sé VBE, (nhan Alt+F11), ban Insert 3 Module, va ban fan lugt Copy Source Code ciia MenuModule va Menu Tim Sheet vao, (Code cla Tim Sheet hau nhu khéng c&n sifa chd nao ca, cn MenuModule, ban sia git téi hang thir 3 : "Tao Menu.xis" bang tén File cla céc ban Public Const TenWB As String = "Tao Menu.xis” Module MoSoSach, téi gidi thigu véi céc ban nhitng cu lénh don gin nhét cho céc Macro md nhiing Sheet cé trong Workbook cia céc ban. Cau lénh a6 nhw sau: Td : ding dé md Sheet NKC (Nhat ky chung). MoNKC la tén cua Macro cé trong cét Macro cia MenuSheet Sub MoNKC() Sheets(" End Sub IKC").Select 3/Cudi cing , cing trong cifa sé VBE, ban Double Click vao This Workbook ctia File Tao Menu va Copy Source vao File ctia cdc ban. Luu File lai va ban sé thay cdc Menu ciia céc ban hoat déng thé nao. & gidi thiéu véi cdc ban File Tim Sheet may hém truéc, fan nay tdi g thigu lai va huéng dan céc ban gan né vao Menu cila cac ban. Cac ban cé thé RightClick, ban cing thay Menu cua minh trong ay. Menu nay sé dutgc x6a bé khi ban déng File, va ty dng hign ra khi ban md File. Chic céc ban thanh céng "Teo céng ey ted gltp Help cho File cia ban Cc ban sé thich thé, néu sif dung mét File nao d6, cé sy huéng dan kip thé é vay, néu ban la ngwai thiét ké, chac han ban cling tiig nghi dén diéu nay. C4ch dan gian nhat [a tao mét Worksheet huéng d&n va cho nhitng dudng Link dén Sheet nay, hodc nhiing Button dé md Sheet Huéng dan, hoac tao Menu...Cch nay, hau nh al cfing biét. Trén dién din Webketoan, Levanduyet da dé cp van dé nay trong bai "Thi: thuat Excel". Ciing nhu bai Tao Menu, c6 thé cac ban bj choang nggp béi nhding doan Code VBA. Téi sé soan lai cho céc ban dé thu hién nhéing doan Code 46, kém File huéng din, hy vong cdc ban sé thich thd véi dé tai nay rial Trich bai Levanduyet : Trich nguyén van: 1/ Str dyng Text Box: Sif dung Text Box dé thé hién théng tin trg gidp cing [8 mét céch thyc hién dé dang. Ban dua Text Box vao trong WorkSheet cia ban bang céch Click vao nut Text Box trén thanh céng cu Drawing Ban dua théng tin tro Text Box cho phii hyp. p vao Text Box va thiét dit chiéu rong va cao cia Théng thuéng ban sé khéng muén Text Box nay xust hién. Vi vay ching ta sé thém 1 nGt |énh (Command Button) dé cho hign ra hoac du di Text Box mét thi tuc 4é khi nguéi ding nh nay thi thi tuc dugc thc hién. Gia str Text Box ban tao ra HelpText. Thu tuc dé nhu sai ‘Sub ToggleHelp() ActiveSheet. TextBoxes("HelpText ActiveSheet. TextBoxes("HelpText End Sub Visible = Not Visible , t6i S& tgo 1 Textbox bing céch Insert / AutoShape. Vé AutoShape xong, ban AddText, cc bude nay, tdi sé khdng a@ c§p. Riéng viée dat tén cho TextBox, ban hay ding NameBox, ¢ bén trai thanh Formula, dé dat tén la HelpText. Ban ding thanh Control ToolBox dé chon nit Button, vé lén Worksheet, dé dat tén cho hit, cing trén thanh Control ToolBox, ban Click vao nut Properties, tai day, phan Name, ban dat la ToggleHelp, phan Caption, ban dat tén Help hay Huéng dan. DoubleClick nit Button, vao cua 56 VBA, ban chép nguyén doan Code ¢ trén vao. Bay gid, ban cé thé thi, Khi ban Click vao nat Help nay, mét TextBox cling véi sy huéng dan ngudi n-ra kip thé. Chic ban thanh céng TAO BANG CHON DU LIEU (DATA SELECTOR) Bai cua Lé van Duyét rén Excel. Mét so u nay. Céng vide Trong cac doanh nghiép nhé dif ligu thudng dugc bé tri chu doanh nghiép khéng quan tam dén viéc bé tri cdc dif li bang Iuu tri, c4c bang ma cho khach hang, nhan n ban hang, cdc san pham ban ra,...la cng viée rat quan trong ban dau dé méc néi cac dif ligu véi nhau trong céng viéc str ly sé liu nhu: theo déi céng ng, theo déi doanh 6, phan tich theo cc yéu cau...wv. Van dé t6i dat ra d day a khi méc néi céc dif ligu voi nhau ban sé phai lam vige nhiéu dén viéc Iva chon mét s6 ma tif cdc bang ma. Lam sao dé céng viéc Itfa chon cua ban duge dé dang? Ligu Excel cé cung cp cho ta céng cu nay khéng? Vang, Excel c6 cung cap cho ta mét sé céng cu nhung theo kinh nghiém ban than, toi nghi cach tét nhat vn 1a ty minh thiét ké cho minh mot bang chon. Cén cée sé ligu khac ban cé thé lay ra tif cdc ham chun cla Excel. © day tdi xin dua ra mét vi dy nhé vé viéc tao bang chon, dé chon ma san pham ti bang san phm. Vi dy trong sheet MaSanPham, téi cé bang ma san phém nhu sau: 1/Dat tén ving : Téi dt tén cho ving A2:B570 cé tén 13 MaSanPham. Bang céch dénh déu ving A2:B570 vao Insert / Name / Define. Trong hép thoal phan Names in Workbook ban gé va MaSanPham , sau dé nhén nit OK. 2/ Phan 2: Thiét ké form dé ngudi ding chon Iva ma san pham. Tu ctfa sé Excel ban nha td hgp phim Alt + F11. Cira sé VBE xuat hién, sau 46 ban chon Insert/UserForm . Ta dat tén form la frmDataSelector, thugc inh Caption la Data Selector. Trén form ta dt cdc déi tugng gém co: 1 TextBox cé tén la TxtCode 1 ndt l@nh cé tén 1a cmdOK = 1 nut lénh cé tén 18 cmdCancel 1 ListView cé tén 1 LvDataSelector. (B6i tugng ListView trén thanh Toolbox, néu khéng cé ban phai vao Tools/Additional Controls va chon 3/ Phin 3: Copy doan ma sau vao Module. Doan ma trong Module, ban khéng can sia ché nao ca. Sau dé ban chon Insert/Module dat tén Module la DataSelector va g vao cae ham va thi tuc sau: code: option Explicit Function RangeNamefxists (Nname) As ' Kiem tra xem Ten bang co ton tai ' Neu ton tai thi tra ve TRUE RangeNamebxist: For Bach n In Act. If UCase (n.Nane) RangeNamel ‘elforkbook . Names UCase (Nname) Then End Function * Day la ham de xuat cac du lieu tu Bang da duoc dat ten "sang mot mang code: Function TableToArray (ByVal Tabi Dim arr Dim vRange As Range Dim i As Long, 3 As 7) ng, m As Long, n Tf Not RangeNamekxists (TableName) Th thi thoat As Long Exit Function 'New ki on Error Resume Next Set vRange = Range (TableName) n) = vRange(m, n).Value TableToArray = arr Set vRange = Nothing End Function "Chuyen tu mang sang ListView va dinh dang ListView cod: Sub ArrayToListview (ByVal VlistView As Listview, ByVal InputArray) Dim m As Long Dim i As Integer, j As Integer Dim biang As Tong, bCot As Long, bieader As Int Dim it As Listrtem Dim anItem If Not IsObject (VlistView) Then Exit Sub on Error Resume Next "Dem so hang va so cot trong InputArray bHiang = UBound(Inputarray, 1) bCot = UBound(Inputarray, 2) "Dinh dang ListView ViistView. View = IvwReport VlistView. FullRowSelect = True VlistView.Multiselect = False VlistView.Gridlines = True VlistView.LabelBdit = IvwManual VlistView.HideColumnHeaders = True bleader ~ VlistView.ColumnHeaders. count Select Case bHeader 'Kac dinh so cot cua ListView case Is < bCot For i = bileader + 1 To bCot viistView.Columleaders.Add i Next i case Is = bcot "khong lam gi ca case Ts > bcot "Khong lam gi ca End Select "Dien cac gia tri tu Inputarray vac Listview For i = 1 To biiang For j = 1 To bCot anItem ~ Inputarray(i, 3) If j= 1 Then Set it = VlistView.ListItems.Add() dt. Text = anIten Else it.SubItems(j - 1) = anTtem End If Next j Next i "pat do rong cac cot For i = 1 To bcot VlistView.Colu Next i Set it ~ Nothing b jeaders(i).Width = 150 MsgBox "Xin loi, Khong the dua mang vao Listview ", vbCritical, "Ph?b? End sub "Dua tu bang vao mang, sau do dua tu mang vao Listview "Va di nhien ban cung co the chuyen tu bang vao ListView code: ‘Sub NhapDubieu () On Error Resume Next call Data: End Sub ector ("MavatTu") Sub PataSelect on Brror Resume Next bean TableToArray (Tenbang) 1 ArrayToListview (frmbataselec (Ché can thay thé la frmDataselector va LVDataselector, néu ban dung tén kha) 4/Phian 4 : Doan Code cia Form : Doan Code nay cé nhiing ché cn sila, téi sé dua ra cy thé, ban hay stfa cho phu hop Doan ma cua frmDataSelector nhu sau: (CmdCancel sé dugc thay thé néu ban ding tén khac cho nut Button ) code: Privat @ Sub omdOK_Click () Dim bGiatrichon on Error Resume Next bGiatrich voatas ActiveCell.Value = bGtatric End Sub lector. SelectedItem. Text on 'Dat gia tri ban chon vao o hien tai (CmdOK sé due thay thé néu ban ding tén khac cho nat Button, LvDataselector cing dugc thay thé néu ban diing tén khac ) ‘Muc dich cua ham sau nham cuon danh sach trong Listview den ma tuong tu ‘trong danh sach khi nguoi su dung go vao Textbox txtCode cac ky tu dau tien cua ma. code: Private Sub txt de_Change() ‘or Resume Next Me. iVbataSelector.FindItem(btim, lvwText, , lvwPart : it. Index Me. LVDataSelector. Me. LVDataSelector set em (bindex) a ‘em (bindex) .Ensurevis ible (TxtCode va LVDataselector la chd cn thay thé) Gia str bay gid t6i muén lay ma san phém tit bang MaSanPham, trong sheet MaSanPham, khi tai nh&n chuét phai d cét 1 cla Sheet2 thi doan ma trong Sheet2 nhu sau: 5/Phan 5 : Doan ma cua Sheet ate Sub Works! Boolean) if Target.column = 1 Then ef _BeforeRightClick (ByVal Target As Range, Cancel AS End Sub ‘Doan Code nay ban can Iuu y : Target.column = i, hay mot sé nao khac tuy ban muén bang chon hign ra é cét nao khi Click chudt phai Bay gid ban hay tré vé cla sé Excel, chon mét 6 bat ky d cét 1 cua Sheet2, ban nhan chuét phi ra, ban hay thit gé vao céc ky ty dau tién cla ma san phém ban can...va ban sé thay né hoat déng nhu thé nao. Ban cé thé cai tién doan ma trong module DataSelector bang ham TableToArray va thi tuc ArrayToListview thanh mét. Chic cac ban thanh céng.

You might also like