Hỏi nhanh - Đáp nhanh về macro (dành cho các thành viên mới học lập trình)

Liên hệ QC

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
 
Xin chào mọi người.
Em đang sử dụng cái combox của Thầy Quang Hải
Nhưng em thấy vẫn chưa yên tâm về một chỗ đó là Em muốn hỏi làm sao có thể bắt buộc nhập dữ liệu theo những điều kiện trong list ở các dòng màu xanh.(không cho nhập lung tung).
Kiểu là dạng như datavalition trong vùng màu đỏ đấy ạ.

Mọi người xem file đính kèm và giúp em với ạ, Xin cám ơn!

Chắc không có cách nào đâu bạn ah.
Mình đã thử đưa cả valiton vào cùng cái combox nhưng vẫn không được,
Có lẽ phải nhờ các chuyên gia GPE chỉnh lại code thôi.
 
Upvote 0
Xin chào mọi người.
Em đang sử dụng cái combox của Thầy Quang Hải
Nhưng em thấy vẫn chưa yên tâm về một chỗ đó là Em muốn hỏi làm sao có thể bắt buộc nhập dữ liệu theo những điều kiện trong list ở các dòng màu xanh.(không cho nhập lung tung).
Kiểu là dạng như datavalition trong vùng màu đỏ đấy ạ.

Mọi người xem file đính kèm và giúp em với ạ, Xin cám ơn!

Mình gợi ý thế này nha
Thêm cái khóa sheet và cái mở sheet nữa chắc là được. Thử đi, nếu khi nào bí quá thì mình giúp cho. Phải tập bơi chứ.
 
Upvote 0
Xin chào mọi người.
Em đang sử dụng cái combox của Thầy Quang Hải
Nhưng em thấy vẫn chưa yên tâm về một chỗ đó là Em muốn hỏi làm sao có thể bắt buộc nhập dữ liệu theo những điều kiện trong list ở các dòng màu xanh.(không cho nhập lung tung).
Kiểu là dạng như datavalition trong vùng màu đỏ đấy ạ.

Mọi người xem file đính kèm và giúp em với ạ, Xin cám ơn!

Ý bạn là không cho nhập từ bàn phím vào phải ko?
bạn vào properties của combobox, chọn style
chọn 2-fmStyleDropDownList
 
Upvote 0
Xin chào mọi người.
Em đang sử dụng cái combox của Thầy Quang Hải
Nhưng em thấy vẫn chưa yên tâm về một chỗ đó là Em muốn hỏi làm sao có thể bắt buộc nhập dữ liệu theo những điều kiện trong list ở các dòng màu xanh.(không cho nhập lung tung).
Kiểu là dạng như datavalition trong vùng màu đỏ đấy ạ.

Mọi người xem file đính kèm và giúp em với ạ, Xin cám ơn!

Bạn thêm dòng lệnh này vào sub hien:

Mã:
.Style = fmStyleDropDownList
 

File đính kèm

  • Combox.xls
    51 KB · Đọc: 13
Upvote 0
Xin cám ơn mọi người đã tìm cách giúp đỡ!
Có vấn đề gì Em không làm được lại nhờ các Anh Chị và các Thầy nhé! Hihi
 
Upvote 0
mình lang thang trên diễn đan, copy được một đạon code lâu rồi, bi giờ định đen vào áp dụng, nhưng đọc tới đọc lui hoai mà ko biết dòng lệnh nào giúp nó loại giá trị trùng khi nạp vào combobox, nên nhờ ACE chỉ dùm

Sub addvalue()


Dim c As Range, Coll As New Collection
On Error Resume Next
For Each c In Range([D5], [D5000].End(xlUp))
Coll.Add c.Value, c.Value
Next c
On Error GoTo 0
For Each Item In Coll
Sheet1.ComboBox1.AddItem Item
Next Item

End Sub

Tks ACE nhiu nhìu
 

File đính kèm

  • RemoveDup.xls
    30.5 KB · Đọc: 10
Upvote 0
mình lang thang trên diễn đan, copy được một đạon code lâu rồi, bi giờ định đen vào áp dụng, nhưng đọc tới đọc lui hoai mà ko biết dòng lệnh nào giúp nó loại giá trị trùng khi nạp vào combobox, nên nhờ ACE chỉ dùm

Sub addvalue()


Dim c As Range, Coll As New Collection
On Error Resume Next
For Each c In Range([D5], [D5000].End(xlUp))
Coll.Add c.Value, c.Value
Next c
On Error GoTo 0
For Each Item In Coll
Sheet1.ComboBox1.AddItem Item
Next Item

End Sub

Tks ACE nhiu nhìu

Đối với Collection thì không có loại bỏ dữ liệu trùng. Khi gặp em nào có trong Coll rồi thì sẽ gây ra 1 lỗi. Câu lệnh On error Resume next giúp xử lý cái lỗi này, vây thôi.

PS: Coll không được tiện dụng cho lắm, tốt nhất xài Dictionary. Khi nạp dữ liệu vào Dic thì nạp vào Combobox luôn cho nhanh.
 
Lần chỉnh sửa cuối:
Upvote 0
mình lang thang trên diễn đan, copy được một đạon code lâu rồi, bi giờ định đen vào áp dụng, nhưng đọc tới đọc lui hoai mà ko biết dòng lệnh nào giúp nó loại giá trị trùng khi nạp vào combobox, nên nhờ ACE chỉ dùm

Sub addvalue()


Dim c As Range, Coll As New Collection
On Error Resume Next
For Each c In Range([D5], [D5000].End(xlUp))
Coll.Add c.Value, c.Value
Next c
On Error GoTo 0
For Each Item In Coll
Sheet1.ComboBox1.AddItem Item
Next Item

End Sub

Tks ACE nhiu nhìu

Thuật toán chính nằm ở chỗ tính chất của Collection là không cho ghi khoá đúp, nếu gặp khoá đã ghi rồi thì error - ghi không được. Code ở đây bắt lỗi error trong lúc ghi, rồi tiếp tục với dòng kế tiếp. Như vậy tất cả những trị đúp đều bị loại ra.

Kỹ thuật bắt lỗi này rất thông dụng cho ngôn ngữ thuộc dòng họ BASIC
 
Upvote 0
mình lang thang trên diễn đan, copy được một đạon code lâu rồi, bi giờ định đen vào áp dụng, nhưng đọc tới đọc lui hoai mà ko biết dòng lệnh nào giúp nó loại giá trị trùng khi nạp vào combobox, nên nhờ ACE chỉ dùm

Sub addvalue()
Tks ACE nhiu nhìu

Cái này là dùng bẫy lỗi on Error .... " để loại bỏ giá trị trùng " <---- khi gặp giá trị trùng nó sẽ báo lỗi ----> gặp câu lệnh On Error Resume Next --> sub sẽ bỏ qua gía trị này và duyệt tiếp giá trị sau **~**
 
Upvote 0
Đối với Collection thì không có loại bỏ dữ liệu trùng. Khi gặp em nào có trong Coll rồi thì sẽ gây ra 1 lỗi. Câu lệnh On error Resume next giúp xử lý cái lỗi này, vây thôi.

PS: Coll không được tiện dụng cho lắm, tốt nhất xài Dictionary. Khi nạp dữ liệu vào Dic thì nạp vào Combobox luôn cho nhanh.

cám ơn các anh nhìu nhìu.
cái Dic. nó không bít mình, nên mình ko dám sử dụng
nhờ anh viết dùm cách nạp vào combobox dữ liệu không trùng và sort theo A,B,C được không anh.
hiện nay tui phai advance filter ra một cột khác rồi mới nạp vào
 
Upvote 0
cám ơn các anh nhìu nhìu.
cái Dic. nó không bít mình, nên mình ko dám sử dụng
nhờ anh viết dùm cách nạp vào combobox dữ liệu không trùng và sort theo A,B,C được không anh.
hiện nay tui phai advance filter ra một cột khác rồi mới nạp vào

Collection viết sao thì Dictionary viết gần như y chang vậy... Chỉ là Dictionary có thêm 1 số thuộc tính và phương thức khác hổ trợ mạnh hơn (chẳng hạn là phương thức Exists để xét sự tồn tại của 1 Key trong khi Collection không có)
----------------
Còn nói về Advanced Filter thì bạn đừng chê nó nha ---> Nó cho tốc độ tuyệt nhanh ---> Nếu đang dùng thì cứ vậy mà dùng đi
 
Upvote 0
cám ơn các anh nhìu nhìu.
cái Dic. nó không bít mình, nên mình ko dám sử dụng
nhờ anh viết dùm cách nạp vào combobox dữ liệu không trùng và sort theo A,B,C được không anh.
hiện nay tui phai advance filter ra một cột khác rồi mới nạp vào

----------------
Còn nói về Advanced Filter thì bạn đừng chê nó nha ---> Nó cho tốc độ tuyệt nhanh ---> Nếu đang dùng thì cứ vậy mà dùng đi


Thì bạn nói cách làm tay cho excel hiểu dưới dạng code -+*/ ---> thử code dưới đấy xem :
[GPECODE=vb]
Sub addvalue()
Dim mycell As Range
Application.ScreenUpdating = 0
Range("D:D").AdvancedFilter 2, , [IV1], 1
Range("IV1", [IV65536].End(3)).Sort [IV1]
For Each mycell In Range("IV1", [IV65536].End(3))
Sheet1.ComboBox1.AddItem mycell.Value
Next
[IV:IV].ClearContents
Application.ScreenUpdating = 1
End Sub
[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn các anh nhìu nhìu.
cái Dic. nó không bít mình, nên mình ko dám sử dụng
nhờ anh viết dùm cách nạp vào combobox dữ liệu không trùng và sort theo A,B,C được không anh.
hiện nay tui phai advance filter ra một cột khác rồi mới nạp vào

Vẫn dùng Advanced xem thế nào
PHP:
Sub nap_list()
[E5:E10000].ClearContents
[D5:D10000].AdvancedFilter 2, , [E5], 1
Range([E5], [E65536].End(3)).Sort [E4]
Range([E5], [E65536].End(3)).Name = "list"
ActiveSheet.ComboBox1.ListFillRange = "list"
End Sub
 
Upvote 0
Thì bạn nói cách làm tay cho excel hiểu dưới dạng code -+*/ ---> thử code dưới đấy xem :
[GPECODE=vb]
Sub addvalue()
Dim mycell As Range
Application.ScreenUpdating = 0
Range("D:D").AdvancedFilter 2, , [IV1], 1
Range("IV1", [IV65536].End(3)).Sort [IV1]
For Each mycell In Range("IV1", [IV65536].End(3))
Sheet1.ComboBox1.AddItem mycell.Value
Next

[IV:IV].ClearContents
Application.ScreenUpdating = 1
End Sub
[/GPECODE]
Nạp vào ComboBox hoặc ListBox thì không cần phải vòng lập đâu
Ví dụ:
Mã:
Sub addvalue()
  Dim arr
  With Sheet1
    .Range("D5:D50000").AdvancedFilter 2, , .[IV1], 1
    With .Range("IV1", .[IV65536].End(3))
      .Sort .Cells(1, 1), Header:=xlYes
      arr = Intersect(.Cells, .Offset(1))
    End With
   .ComboBox1.List() = arr
   .[IV:IV].ClearContents
  End With
End Sub
Dùng Advanced Filter thì đường nhiên dữ liệu phải có tiêu đề. Nhưng khi nạp vào ComboBox, thông thường ta sẽ loại bỏ tiêu đề (chỉ lấy dữ liệu bên dưới)
 
Upvote 0
Chào ACE, chúc một ngày làm việc vui vẻ.
ACE cho tui hỏi: tui có một file excel có chứa một số đoạn macro, khi gởi file này cho người khác qua email, tui không muốn kèm các đoạn code này theo (vì người ta chỉ cần đọc kết quả).
cá cách nào không, nhờ ACE chỉ dùm

tks so much
 
Upvote 0
Chào ACE, chúc một ngày làm việc vui vẻ.
ACE cho tui hỏi: tui có một file excel có chứa một số đoạn macro, khi gởi file này cho người khác qua email, tui không muốn kèm các đoạn code này theo (vì người ta chỉ cần đọc kết quả).
cá cách nào không, nhờ ACE chỉ dùm

tks so much

Thì bạn copy paste value, xóa hết macro, công thức đi là được rồi
Đơn giản hơn nữa: Chuyển mọi thứ thành PDF (ví như bạn nói người ta chỉ cần đọc kết quả)
 
Upvote 0
cám ơn anh nhiều, nhưng nhiều sheet, copy past value cũng hơi oai. để tôi install cái convert qua PDF thử.
 
Upvote 0
Tự xoá bài vì đăng không đúng chỗ - xin lỗi mọi người.
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn anh nhiều, nhưng nhiều sheet, copy past value cũng hơi oai. để tôi install cái convert qua PDF thử.

Thì bạn viết 1 code cho nó paste Value, chẳng hạn:
Mã:
Sub Main()
  Dim wks As Worksheet, aData
  On Error Resume Next
  For Each wks In ThisWorkbook.Worksheets
    aData = wks.UsedRange.Value
    wks.UsedRange.Value = aData
  Next
End Sub
Chạy code xong, xóa luôn code rồi gửi
 
Upvote 0
Thì bạn copy paste value, xóa hết macro, công thức đi là được rồi
Đơn giản hơn nữa: Chuyển mọi thứ thành PDF (ví như bạn nói người ta chỉ cần đọc kết quả)

Thường thường thì báo cáo lên cấp cao nên chuyển qua PDF để tránh phiền phức - mấy sếp cấp cao không muốn click bị tùm lum dữ liệu. Chỉ có báo cáo cấp thấp mới giữ nguyên bản cho người đọc có cơ hội kiểm chứng dữ liệu nếu cần.

Cũng có khi người nhận cần bản dữ liệu dạng Excel để dùng vào việc khác - ví dụ gọp dữ liệu vào nơi khác, export qua CSDL khác vv... Trường hợp này bạn viết một hàm đơn giản trong file gốc. Hàm này "xổ" dữ liệu (tiếng chuyên nghiêp là spit) sang một văn bản khác, hoàn toàn sạch sẽ. Cái này nếu phải làm nhiều thì viết cho kỹ, export ra file bas để giành đó. Mỗi lần làm xong một văn bản thì import vào và "xổ" dữ liệu.
 
Upvote 0
Web KT
Back
Top Bottom