tuananhya2
Thành viên mới

- Tham gia
- 18/8/12
- Bài viết
- 8
- Được thích
- 0
Co ai chỉ dùm cách tạo pass marco với
Ở đây em muốn học VBA để phục vụ cho công việc của mình tuy nhiên khi xử lý chương trình của mình cho phù hợp ở Sheet(BIEU) là em có cột X là mã Loại đất và khi lấy dữ liệu bên cột MDSD Sheet(DATA) thì em phải khai báo thêm nhiều biến quá
Mã:Cap_GCN1 = .[X5].Value: Cap_GCN2 = .[X6].Value: Cap_GCN3 = .[X7].Value: Cap_GCN4 = .[X8].Value: Cap_GCN5 = .[X9].Value: Cap_GCN6 = .[X10].Value .......
Và phải dùng nhiều lệnh If... Else... giờ em muốn các anh chị giúp là có cách nào truy xuất theo mảng để rút ngắn lài phần Code này của em không ạ
Mã:If sArr(N, 5) = "LUC" Then dArr(K, 5) = Cap_GCN1 ElseIf sArr(N, 5) = "LUK" Then dArr(K, 5) = Cap_GCN1 ElseIf sArr(N, 5) = "LUN" Then dArr(K, 5) = Cap_GCN1 ElseIf sArr(N, 5) = "COC" Then dArr(K, 5) = Cap_GCN2 ElseIf sArr(N, 5) = "BHK" Then dArr(K, 5) = Cap_GCN3 ElseIf sArr(N, 5) = "NHK" Then dArr(K, 5) = Cap_GCN3 ElseIf sArr(N, 5) = "LNC" Then dArr(K, 5) = Cap_GCN4 ElseIf sArr(N, 5) = "LNQ" Then dArr(K, 5) = Cap_GCN4 ElseIf sArr(N, 5) = "LNk" Then dArr(K, 5) = Cap_GCN4 ElseIf sArr(N, 5) = "TSL" Then dArr(K, 5) = Cap_GCN5 ElseIf sArr(N, 5) = "TSN" Then dArr(K, 5) = Cap_GCN5 ElseIf sArr(N, 5) = "LMU" Then dArr(K, 5) = Cap_GCN6 ElseIf sArr(N, 5) = "NKH" Then dArr(K, 5) = Cap_GCN7 ElseIf sArr(N, 5) = "RSN" Then dArr(K, 5) = Cap_GCN8 ElseIf sArr(N, 5) = "RST" Then dArr(K, 5) = Cap_GCN8 ElseIf sArr(N, 5) = "RSK" Then dArr(K, 5) = Cap_GCN8 ElseIf sArr(N, 5) = "RSM" Then dArr(K, 5) = Cap_GCN8 ElseIf sArr(N, 5) = "RPN" Then dArr(K, 5) = Cap_GCN9 ElseIf sArr(N, 5) = "RPT" Then dArr(K, 5) = Cap_GCN9 ElseIf sArr(N, 5) = "RPK" Then dArr(K, 5) = Cap_GCN9 ElseIf sArr(N, 5) = "RPM" Then dArr(K, 5) = Cap_GCN9 ElseIf sArr(N, 5) = "RDN" Then dArr(K, 5) = Cap_GCN10 ElseIf sArr(N, 5) = "RDT" Then dArr(K, 5) = Cap_GCN10 ElseIf sArr(N, 5) = "RDK" Then dArr(K, 5) = Cap_GCN10 ElseIf sArr(N, 5) = "RDM" Then dArr(K, 5) = Cap_GCN10 ElseIf sArr(N, 5) = "ONT" Then dArr(K, 5) = Cap_GCN11 ElseIf sArr(N, 5) = "ODT" Then dArr(K, 5) = Cap_GCN12 ElseIf sArr(N, 5) = "TSC" Then dArr(K, 5) = Cap_GCN13 ElseIf sArr(N, 5) = "TSK" Then dArr(K, 5) = Cap_GCN14 ElseIf sArr(N, 5) = "CQP" Then dArr(K, 5) = Cap_GCN15 ElseIf sArr(N, 5) = "CAN" Then dArr(K, 5) = Cap_GCN16 ElseIf sArr(N, 5) = "SKK" Then dArr(K, 5) = Cap_GCN17 ElseIf sArr(N, 5) = "SKC" Then dArr(K, 5) = Cap_GCN18 ElseIf sArr(N, 5) = "SKS" Then dArr(K, 5) = Cap_GCN19 ElseIf sArr(N, 5) = "SKX" Then dArr(K, 5) = Cap_GCN20 ElseIf sArr(N, 5) = "DGT" Then dArr(K, 5) = Cap_GCN21 ElseIf sArr(N, 5) = "DTL" Then dArr(K, 5) = Cap_GCN22 ElseIf sArr(N, 5) = "DNL" Then dArr(K, 5) = Cap_GCN23 ElseIf sArr(N, 5) = "DBV" Then dArr(K, 5) = Cap_GCN24 ElseIf sArr(N, 5) = "DVH" Then dArr(K, 5) = Cap_GCN25 ElseIf sArr(N, 5) = "DYT" Then dArr(K, 5) = Cap_GCN26 ElseIf sArr(N, 5) = "DGD" Then dArr(K, 5) = Cap_GCN27 ElseIf sArr(N, 5) = "DTT" Then dArr(K, 5) = Cap_GCN28 ElseIf sArr(N, 5) = "DKH" Then dArr(K, 5) = Cap_GCN29 ElseIf sArr(N, 5) = "DXH" Then dArr(K, 5) = Cap_GCN30 ElseIf sArr(N, 5) = "DCH" Then dArr(K, 5) = Cap_GCN31 ElseIf sArr(N, 5) = "DDT" Then dArr(K, 5) = Cap_GCN32 ElseIf sArr(N, 5) = "DRA" Then dArr(K, 5) = Cap_GCN33 ElseIf sArr(N, 5) = "TON" Then dArr(K, 5) = Cap_GCN34 ElseIf sArr(N, 5) = "TIN" Then dArr(K, 5) = Cap_GCN35 ElseIf sArr(N, 5) = "NTD" Then dArr(K, 5) = Cap_GCN36 ElseIf sArr(N, 5) = "SON" Then dArr(K, 5) = Cap_GCN37 ElseIf sArr(N, 5) = "MNC" Then dArr(K, 5) = Cap_GCN38 ElseIf sArr(N, 5) = "PNK" Then dArr(K, 5) = Cap_GCN39 ElseIf sArr(N, 5) = "BCS" Then dArr(K, 5) = Cap_GCN40 ElseIf sArr(N, 5) = "DCS" Then dArr(K, 5) = Cap_GCN40 ElseIf sArr(N, 5) = "NCS" Then dArr(K, 5) = Cap_GCN40 Else dArr(K, 5) = vbNullString End If
Đây chỉ có 40 mã nếu có nhiều hơn thì sao????
huuu
nhờ mọi người giúp đỡ ạ
thanks
khó thất...hihihi...........viết trực tiếp trên sheet dể hình dung hơn...............hehehe.
anh có thể giải thích thêm cái lệnh này giúp với
có thể hiểu vậy được ko anhMã:Dic.Add KHO(i, 3), ""
==>Dic add, lệnh nạp vào dic
==>KHO(i, 3), là phần tử nạp
==> vậy còn "" có nghĩa là sao ạh?, thông thường tôi thấy người ta hay thêm cái lệnh k=k+1
và lệnh nạp vào dic là
thì tôi hiểu là qua mỗi lần lặp, k tăng lên một lần, và các phần tử được nạp nối tiếp nhau vào trong dic. còn như trường hợp anh viết thì ko biết hiểu như thế nào?Mã:Dic.Add KHO(i, 3), k
mong anh giải thích giúp
p/s: tôi học theo kiểu thợ đụng,"đụng đâu học đó", nên ko có bài bảng....hihihih
cám ơn
Add là "thêm vào". Ta thêm 1 key và 1 item tương ứng với nó. Tức thêm vào 1 cặp (key, item). Người ta không cần item (trong phần tiếp theo của code) nên người ta nhập item = "" (chuỗi rỗng). Người khác cần trong phần tiếp theo thì nhập item = k (số)
Nhiều khi bạn có một loạt tương quan "key - item" và khi có 1 key (từ khóa) nào đó bạn muốn đọc ra item tương ứng với nó. Lúc đó thì khi gọi Add bạn phải nhập key và item tương ứng với nó.
Giả sử bạn có dữ liệu từ điển ở dạng tập tin txt: có 10000 dòng, mỗi dòng có cấu trúc vd. [từ]TAB[nghĩa của từ]. Vd. loveTABtình yêu (TAB là ký tự có code = 9 - phím TAB)
Bây giờ code của bạn đọc vào: UserForm có 1 ListBox hiển thị các từ, và nếu chọn từ nào thì sẽ hiển thị nghĩa tiếng Việt của từ đó trong TextBox. Bạn làm thế nào. Giả sử bạn muốn dùng "đít thon". Thế thì khi Add bạn không chỉ chỉ ra "từ - key - từ khóa" mà phải chỉ ra cả "item - nghĩa của từ" nữa. Vậy thì bạn đọc tập tin txt --> tách mỗi dòng thành [từ] và [nghĩa] --> dic.Add [từ], [nghĩa] --> thêm từ vào ListBox.
Khi người ta chọn trong ListBox thì bạn đọc ra được [từ] --> bạn dùng dic.item("key") để đọc ra item là nghĩa để "nhồi" vào TextBox.
Ngoài việc làm từ điển thì bạn cũng có thể làm vd. "sách nấu ăn": key = tên món ăn", item = nguyên liệu, cách nấu. Sổ điện thoại: key = họ tên, item = địa chỉ, số dđ v...v
Chính vì để lưu trữ key (từ khóa) - item (giá trị), cấu trúc như từ điển mà "nó" có tên là Dictionary.
khó thất...hihihi...........viết trực tiếp trên sheet dể hình dung hơn...............hehehe.
anh có thể giải thích thêm cái lệnh này giúp với
có thể hiểu vậy được ko anhMã:Dic.Add KHO(i, 3), ""
==>Dic add, lệnh nạp vào dic
==>KHO(i, 3), là phần tử nạp
==> vậy còn "" có nghĩa là sao ạh?, thông thường tôi thấy người ta hay thêm cái lệnh k=k+1
và lệnh nạp vào dic là
thì tôi hiểu là qua mỗi lần lặp, k tăng lên một lần, và các phần tử được nạp nối tiếp nhau vào trong dic. còn như trường hợp anh viết thì ko biết hiểu như thế nào?Mã:Dic.Add KHO(i, 3), k
mong anh giải thích giúp
p/s: tôi học theo kiểu thợ đụng,"đụng đâu học đó", nên ko có bài bảng....hihihih
cám ơn
Function Can3(Num As Double) As Double
If Num >= 0 Then
Can3 = Num ^ (1 / 3)
Else
Can3 = -Abs(Num) ^ (1 / 3)
End If
End Function
theo mình hiểu thì điều kiện để phép tính a^b có nghĩa là a > = 0Ừ hen! Giờ mới chú í chuyện này;
Trong cửa sổ trung gian thì được;
Còn trong VBA tạm thời có cách đi đường vòng:
PHP:Function Can3(Num As Double) As Double If Num >= 0 Then Can3 = Num ^ (1 / 3) Else Can3 = -Abs(Num) ^ (1 / 3) End If End Function
Em thử viết (-2) ^ (1/3) trong vba , nhưng đều báo lỗi, Vậy nếu em muốn tính căn bậc 3 của (-2) thì phải viết như thế nào !?
Đây là với VBA , còn với VB thì không có hàm power,
Nói chung với VB 1 số hàm người dùng phải tự tạo ra ví dụ Asin, Acos ,....
Giả sử cái nút của bạn có tên shp và ô bạn muốn di chuyển là A5 thì đoạn code thực hiện theo yêu cầu làThưa ad, em đã gán macro vào nút như hình vẽ, vậy trong VBA có lệnh nào để di chuyển nút đó đến 1 ô (hoặc tọa độ) mình mong muốn không ạ? Ví dụ như chuyển nó xuống cell có chữ "Nhóm 1" chẳng hạn.
Mong ad giải đáp giùm em, em xin cảm ơn.
ActiveSheet.Shapes("Shp").Left = [A5].Left
ActiveSheet.Shapes("Shp").Top = [A5].Top
Thử với cái này xem:Bảng excel mình có nhiều giá trị cần ấn f2 rùi enter mới hiện giá trị. mà làm thủ công mất thời gian quá. Mình muốn một đoạn VBA làm mới giá trị trong excell, như ấn f2 rùi ấn enter
Do mới học VBA nên chưa biết nhiều nhờ các bác chỉ giúp.
Sub AllRefresh()
ActiveWorkbook.RefreshAll
End Sub
Thưa ad, em đã gán macro vào nút như hình vẽ, vậy trong VBA có lệnh nào để di chuyển nút đó đến 1 ô (hoặc tọa độ) mình mong muốn không ạ? Ví dụ như chuyển nó xuống cell có chữ "Nhóm 1" chẳng hạn.
Mong ad giải đáp giùm em, em xin cảm ơn.
Sub GPE()
Dim cmdButton As OLEObject, rng As Range
Set rng = Application.InputBox("Nhap dia chi Cell", , , , , , , 8)
Set cmdButton = ActiveSheet.OLEObjects _
([COLOR=#ff0000][B]" TEN CUA COMMAND BUTTON "[/B][/COLOR])
With cmdButton
.Left = rng.Left
.Top = rng.Top
rng.RowHeight = .Height
End With
End Sub
Cho em hỏi làm sao để biết tên của shape ạ? Em mò thử cũng chỉ thấy tên của Macro gán vào thôi.Giả sử cái nút của bạn có tên shp và ô bạn muốn di chuyển là A5 thì đoạn code thực hiện theo yêu cầu là
Mã:ActiveSheet.Shapes("Shp").Left = [A5].Left ActiveSheet.Shapes("Shp").Top = [A5].Top
Thưa anh, em đã tạo 1 button như hình vẽ, nhưng khi chạy thử thì bị lỗi "Unable to get the OLEObjects property of the worksheet class", tại sao lại như vậy ạ? Hay do em nhập tên button sai? Em nhập tên Button là cái tên hiện ra trên button khi mới tạo luôn .Mã:Sub GPE() Dim cmdButton As OLEObject, rng As Range Set rng = Application.InputBox("Nhap dia chi Cell", , , , , , , 8) Set cmdButton = ActiveSheet.OLEObjects _ ([COLOR=#ff0000][B]" TEN CUA COMMAND BUTTON "[/B][/COLOR]) With cmdButton .Left = rng.Left .Top = rng.Top rng.RowHeight = .Height End With End Sub
Thưa anh, em đã tạo 1 button như hình vẽ, nhưng khi chạy thử thì bị lỗi "Unable to get the OLEObjects property of the worksheet class", tại sao lại như vậy ạ? Hay do em nhập tên button sai? Em nhập tên Button là cái tên hiện ra trên button khi mới tạo luôn .