Đố vui về VBA!

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,911
Nhằm cũng cố kiến thức về VBA cho các bạn mới bắt đầu và cả những bạn đang ứng dụng mà chưa hiểu nhiều về nó, tôi mở topic này với mong mõi qua những câu hỏi vui, các bạn sẽ nhận định lại sự hiểu biết cũa mình... (Kễ cã chính tôi cũng đang tập tành nên có rất nhiều cái chưa biết)
Mong rằng topic sẽ mang đến cho các bạn những khám phá thú vị với những cái tưỡng chừng như đã biết
Mong nhận dc bài viết về câu đố cũa các cao thủ! Còn các bạn mới thì đừng ngại khi đưa ra ý kiến cũa mình.. Có sai có sữa sẽ hoàn thiện!
Tôi xin mỡ màn trước bằng 1 câu hỏi đơn giãn
ANH TUẤN

CÂU HỎI 1: Tại sao biến K ko hoạt động?
Tôi muốn khi nhấn vào 1 button thì cell A1 sẽ tăng lên 1 đơn vị... Tôi đã làm như sau:
-Tạo 1 Command Button (nút nhấn thuộc thanh Control Toolbox), click phải chuột lên nút nhấn, chọn View code, rồi gõ vào đoạn code sau:
PHP:
Private Sub CommandButton1_Click()
   K = K + 1
   Range("A1").Value = K
End Sub
Ban đầu K chưa có gì, xem như =0, nhấn nút lần thứ nhất thì K dc tăng thêm 1, vậy K hiện tại sẽ bằng 1, và gán K vào cell A1 thì đương nhiên A1 sẽ =1... Nhấn nút lần 2, K lại dc tăng thêm 1 nên hiện tại K sẽ =2 và cell A1 cũng sẽ =2... vân vân.. từ đó diễn tiến tiếp...
Hi.. hi.. Điều này nghe qua có vẽ rất hợp lý, ấy thế mà khi nhấn nút nó chỉ hoạt động dc duy nhất 1 lần (A1 = 1) rồi thôi ko nhút nhít nữa...
Các bạn có thể giãi thích tại sao lại như thế ko? Tại sao những lần nhấn nút sau đó K lại ko tăng thêm tí nào (vì thực tế A1 vẫn cứ = 1 hoài) ?
ANH TUẤN
 
- Tôi có 1 UserForm với 1 TextBox
- Trên sheet đang select cell C5
- Khi gọi form lên, nếu ta nhập liệu gì đó từ bàn phím thì đương nhiên chuổi sẽ được nhập vào TextBox trên Form
Tôi muốn rằng: Khi form load lên, nếu nhập liệu từ bàn phím thì chuổi sẽ được nhập vào ActiveCell
Xin hỏi: Phải viết code thế nào?
----------------------------------------------
(Chủ đề này ít người quan tâm nhưng chắc chắn rồi 1 ngày nào đó các bạn sẽ dùng đến)

Có phải là khi nhập liệu vào textbox trên form thì dữ liệu sẽ đưa vào ActiveCell không Thầy ?
 
Upvote 0
Có phải là khi nhập liệu vào textbox trên form thì dữ liệu sẽ đưa vào ActiveCell không Thầy ?

Hỏng phải vậy!
Tôi muốn rằng: Bấm nút gọi form lên, nếu tôi gõ gì từ bàn phím thì ngay lập tức chuổi ấy sẽ được cho vào ActiveCell (thay vì sẽ vào TextBox) chứ không phải là chuyển dữ liệu từ TextBox vào cell
(Khi gõ bàn phím thì TextBox chẳng có gì cả)
Nói đúng hơn là Focus tại ActiveCell để sẳn sàng cho việc nhập liệu vào cell (dù hiện tại form đang được load)
 
Upvote 0
Hỏng phải vậy!
Tôi muốn rằng: Bấm nút gọi form lên, nếu tôi gõ gì từ bàn phím thì ngay lập tức chuổi ấy sẽ được cho vào ActiveCell (thay vì sẽ vào TextBox) chứ không phải là chuyển dữ liệu từ TextBox vào cell
(Khi gõ bàn phím thì TextBox chẳng có gì cả)
Nói đúng hơn là Focus tại ActiveCell để sẳn sàng cho việc nhập liệu vào cell (dù hiện tại form đang được load)

Có phải code sau không Thầy:

Mã:
Sub ShowForm()
  UserForm1.Show (False)
 [B][COLOR=blue] AppActivate Application[/COLOR][/B]
End Sub
 
Upvote 0
Tạo hiệu ứng gõ chữ trên cell

Đố các bạn làm được HIỆU ỨNG GÕ CHỮ
Lưu ý rằng: Hiệu ứng gõ chữ có nghĩa là từng ký tự được điền vào cell, kèm theo con nháy chuột phải dịch chuyển theo (khác với viêc gán ký tự vào cell nha)
Xem minh họa bằng clip này:

[video=youtube;5lfe35s765I]http://www.youtube.com/watch?v=5lfe35s765I[/video]
 
Lần chỉnh sửa cuối:
Upvote 0
Add List cho ComboBox thuộc thanh Forms

Nhân co người hỏi bài về ComboBox tại đây: Cách tạo Compobox để mở 1 sheet ẩn
Tôi chợt nãy ra ý tưởng dùng code để Add List cho ComboBox thuộc thanh Forms
Đối với ComboBox thuộc thanh Control ToolBox thì mọi người quá quen thuộc rồi, còn với ComboBox Forms thì sao? Liệu có thể Add list cho nó được không?
Mời các bạn thử xem
 
Upvote 0
Có lẽ giống thế này phải không. mình nêu cách thôi chưa hoàn thiện theo ý anhtuan được vì mổ cò lâu quá, các bạn bổ xung nha.
 

File đính kèm

  • Menu_Sea.xls
    30 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
Có lẽ giống thế này phải không. mình nêu cách thôi chưa hoàn thiện theo ý anhtuan được vì mổ cò lâu quá, các bạn bổ xung nha.
Ý em là làm trên ComboBox (thuộc thanh Forms) chứ hổng phải menu anh à
Giống file đính kèm này đây
Anh và mọi người xem và nghiên cứu thử xem em đã Add list vào ComboBox như thế nào nhé
(Đã là VUI thế code cũng ngắn gọn lắm, chẳng phức tạp đâu)
 

File đính kèm

  • Cbo_Forms_Test.xls
    28 KB · Đọc: 37
Upvote 0
Có lẽ file thế này hợp hơn.
ôi, giờ mới dọc bai tiếp và hiểu câu hỏi khác so với mình hiểu
 

File đính kèm

  • Menu_Sea.xls
    55.5 KB · Đọc: 22
Lần chỉnh sửa cuối:
Upvote 0
Em xin gợi ý thế này: Cách Add list cho ComboBox Forms hoàn toàn y chang như với ComboBox Control ToolBox
Mày mò hoài mà chả biết cái source nằm ở đâu, nhấn Alt Sh F11 thì thấy mà kg biết làm sao.
Xóa thử vài dòng thì thấy CB bớt dòng.
Bác chỉ giúp cách gì mà ghi vào Microsoft Script Editor hay vậy.
Cám ơn nhiều.
 
Upvote 0
Bác chỉ giúp cách gì mà ghi vào Microsoft Script Editor hay vậy.
Cám ơn nhiều.
Tôi đâu có dùng Microsoft Script Editor, tôi dùng VBA đàng hoàng à nha
Mày mò hoài mà chả biết cái source nằm ở đâu,
.
Vấn đề là phải biết được cái ComboBox này trong VBA nó được gọi tên là gì.
Xem lại bài này:
http://www.giaiphapexcel.com/forum/showthread.php?31515-Tạo-Form-bằng-DialogSheet&
sẽ thấy rằng:
- Label thì trong VBA gọi tên là Labels
- CheckBox thì trong VBA gọi tên là CheckBoxes
....................
Ngoài ra, khi ta vẽ ComboBox Forms lên sheet thì tên của nó trong Name Box là Drop Down 1, vậy tên được gọi trong VBA chắc cũng gần gần giống thế! Dropdowns chăng? Thử là biết liền
- Vẽ 1 ComboBox Form lên Sheet (để ý tên của nó trong hộp Name box, thường là Drop Down 1)
- Chèn 1 Module và cho code này vào để thử nghiệm:
PHP:
Sub Test()
  Sheet1.DropDowns("Drop Down 1").Select
End Sub
Chạy thử thấy OK
Vậy kết luận trong VBA, tên của ComboBox Forms được gọi là Dropdowns
Thế thì thử nghiệm Add list xem
PHP:
Sub cboAddList()
  Dim i As Long
  With Sheet1.DropDowns("Drop Down 1")
    For i = 1 To 3
      .AddItem "Item " & i
    Next
  End With
End Sub
Chạy thử rồi bấm mũi tên xổ xuống của ComboBox để kiểm chứng
----------------------
Xem file đính kèm tôi đã làm sẳn
Kết luận: Với các control thuộc thanh Forms thì cách viết code cũng gần giống như các ActiveX control mà thôi
 

File đính kèm

  • ComboBox_Forms_AddList.xls
    33 KB · Đọc: 27
Upvote 0
Vậy Anh có thể tạo cho nó nhiều cột được không?
Bản thân ComboBox Forms không cho phép thể hiện list nhièu cột, cho dù có cố làm thì nó cũng sẽ biến mảng 2 chiều thành 1 chiều mà thôi
Ví dụ thế này sẽ biết liền:
PHP:
Sub Test()
  Dim Arr
  Arr = gì gì đó
  With Sheet1.DropDowns("Cbo1")
    .List() = Arr
  End With
End Sub
Mảng Arr tự bạn khai báo sao cho nó là 2 chiều, gán vào code và chạy thử, xong, bấm mũi tên ComboBox để kiểm chứng
 
Upvote 0
Lấy giá trị mà ta vừa chọn trong ComboBox Forms

Đố tiếp về ComboBox Forms
Giả sử tôi có code sau:
PHP:
Sub AddCbo()
 With ActiveSheet.DropDowns.Add(165.75, 39, 92.25, 21.75)
   .List() = Array("Tên 1", "Tên 2", "Tên 3", "Tên 4", "Tên 5")
 End With
End Sub
Chạy code này, ta được 1 ComboBox với List được add sẳn
Xin hỏi: Khi tôi chọn 1 Item nào đó trong ComboBox, làm sao để nhận được 1 MsgBox với giá trị mà tôi vừa chọn

untitled.JPG
 

File đính kèm

  • cbo_Test.xls
    19.5 KB · Đọc: 16
Upvote 0
Đố tiếp về ComboBox Forms
Giả sử tôi có code sau:
PHP:
Sub AddCbo()
With ActiveSheet.DropDowns.Add(165.75, 39, 92.25, 21.75)
.List() = Array("Tên 1", "Tên 2", "Tên 3", "Tên 4", "Tên 5")
End With
End Sub
Chạy code này, ta được 1 ComboBox với List được add sẳn
Xin hỏi: Khi tôi chọn 1 Item nào đó trong ComboBox, làm sao để nhận được 1 MsgBox với giá trị mà tôi vừa chọn

View attachment 60208
Có cho sửa nguồn và thao tác thủ công không vậy anh?
Nếu có thì em làm như sau:
1. Sửa nguồn một chút:
PHP:
Sub AddCbo()
 With ActiveSheet.DropDowns
    .Delete
    With .Add(165.75, 39, 92.25, 21.75)
        .List() = Array("Tên 1", "Tên 2", "Tên 3", "Tên 4", "Tên 5")
        .Name = "Cbo1"
    End With
 End With
End Sub
2. Tạo thêm 1 Sub:
PHP:
Sub ShowSelectedItem()
  With ActiveSheet.DropDowns("Cbo1")
    MsgBox .List(.Value)
  End With
End Sub
3. Assign Macro cho Cbo1 là ShowSelectedItem
 

File đính kèm

  • cbo_Test.rar
    9.1 KB · Đọc: 18
Upvote 0
Có cho sửa nguồn và thao tác thủ công không vậy anh?
Nếu có thì em làm như sau:
1. Sửa nguồn một chút:
PHP:
Sub AddCbo()
 With ActiveSheet.DropDowns
    .Delete
    With .Add(165.75, 39, 92.25, 21.75)
        .List() = Array("Tên 1", "Tên 2", "Tên 3", "Tên 4", "Tên 5")
        .Name = "Cbo1"
    End With
 End With
End Sub
2. Tạo thêm 1 Sub:
PHP:
Sub ShowSelectedItem()
  With ActiveSheet.DropDowns("Cbo1")
    MsgBox .List(.Value)
  End With
End Sub
3. Assign Macro cho Cbo1 là ShowSelectedItem
Cảm ơn bạn đã quan tâm. Bạn làm chính xác rồi đấy
Nếu thêm 1 chút tự động như vầy thì đở mất công Assign Macro
Mã:
Sub AddCbo()
  With ActiveSheet.DropDowns
    .Delete
    With .Add(165.75, 39, 92.25, 21.75)
      .List() = Array("Tên 1", "Tên 2", "Tên 3", "Tên 4", "Tên 5")
      .Name = "Cbo1"
      [B][COLOR="red"].OnAction = "ShowSelectedItem"[/COLOR][/B]
    End With
   End With
End Sub
Thêm chổ màu đỏ ấy
------------------------
Nói thêm: Nếu bạn khai báo 1 biến dạng vầy:
PHP:
Dim cbo as Dropdown
Thì ngay khi bạn gõ cbo.
sau dấu chấm sẽ có 1 tooltip xổ xuống gợi ý về các thuộc tính và phương thức (khỏe, khỏi mất công thuộc lòng)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom