Đố 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
 
bài đó có viết tiếng Việt mà, sao anh không hiểu nhỉ ?

Bạn vào giảng đường Đại Học Luật năm thứ tư, nghe người ta giảng bạn hiểu không? người ta cũng nói tiếng Việt mà.

... Dù sao cũng năm mới tới nên mọi người nên giữ không khí vui vẻ. ...

Tôi cũng chả biết thế nào là "không khí vui vẻ" nữa. Cứ mỗi lần tôi đang nói chuyện "vui vẻ" với mấy người tôi mến mộ ở đây thì in như ngày hôm sau có người báo cáo và các bài ấy bị xóa mất.
 
Upvote 0
Bạn vào giảng đường Đại Học Luật năm thứ tư, nghe người ta giảng bạn hiểu không? người ta cũng nói tiếng Việt mà.



Tôi cũng chả biết thế nào là "không khí vui vẻ" nữa. Cứ mỗi lần tôi đang nói chuyện "vui vẻ" với mấy người tôi mến mộ ở đây thì in như ngày hôm sau có người báo cáo và các bài ấy bị xóa mất.
Thiệt không anh, em không báo cáo đâu nhé!
 
Upvote 0
Nhân Ô. Táo đã về Giời, xin các bạn viết giúp vài câu lệnh áp dụng fương thức Find() để tìm ra địa chỉ của ô chứa ngày 8/02/2018. (theo file đính kèm)
Hiện ngày đưa ông Táo này đang ở cột đầu trong bảng dữ liệu sau:
PHP:
'
Ngày           Mã         HoTen'
13/1/2018     GPE01     NDU96081631
              GPE02     Ba Tê
              GPE03     PTM0412
24/1/2018     GPE04      Hoàng Trọng Nghĩa
              GPE05     Hai Lúa Miền Tây
              GPE06     PhanTuHuong
6/2/2018      GPE07     BeFaint
              GPE08     HuuThang_BD
              GPE09     AnhTuan1060
8/2/2018      GPE10     NghiaPhuc
              GPE11     QuangHai1969
              GPE12     VanLe33
              GPE13     Be09
. . .   . . .      . . . .

Sẽ rất vui khi được các bạn giúp & chân thành cảm ơn!
 

File đính kèm

  • Date.rar
    3.7 KB · Đọc: 9
Upvote 0
Có tình huống thế này về DialogSheet:
- Mở 1 workbook trắng
- Chèn 1 DialogSheet, mặc định nó có tên là "Dialog1"
- Vào VBA, viết code để show dialogsheet như sau:
Mã:
Sub ShowDialog()
  DialogSheets("Dialog1").Show
End Sub
- Chạy code. Đương nhiên mọi chuyện diễn ra bình thường (sẽ thấy Dialog1 xuất hiện)
----------------------------------
Ấy vậy mà tôi có 1 file (thiết kế y chang như mô tả ở trên) lại báo lỗi khi chạy code

Untitled.jpg

Nếu thêm dòng "On Error Resume Next" vào đầu code thì sẽ chạy được
Vấn đề là lỗi từ đâu ra? Mời xem file và tìm nguyên nhân
 

File đính kèm

  • DialogSheetError.xlsm
    19 KB · Đọc: 13
Upvote 0
Có tình huống thế này về DialogSheet:
- Mở 1 workbook trắng
- Chèn 1 DialogSheet, mặc định nó có tên là "Dialog1"
- Vào VBA, viết code để show dialogsheet như sau:
Mã:
Sub ShowDialog()
  DialogSheets("Dialog1").Show
End Sub
- Chạy code. Đương nhiên mọi chuyện diễn ra bình thường (sẽ thấy Dialog1 xuất hiện)
----------------------------------
Ấy vậy mà tôi có 1 file (thiết kế y chang như mô tả ở trên) lại báo lỗi khi chạy code

View attachment 200654

Nếu thêm dòng "On Error Resume Next" vào đầu code thì sẽ chạy được
Vấn đề là lỗi từ đâu ra? Mời xem file và tìm nguyên nhân
hihi, có cái gì đó tác động vào, không cho ta gọi cái dialog1 đó??? Ta đổi cái tên gọi thủ tục đó thì thấy nó báo là macro không tồn tại hoặc bị ẩn???
 
Upvote 0
hihi, có cái gì đó tác động vào, không cho ta gọi cái dialog1 đó??? Ta đổi cái tên gọi thủ tục đó thì thấy nó báo là macro không tồn tại hoặc bị ẩn???
Uh, nó ngộ vậy đó. Nếu mình tự xây dựng y chang vậy thì chạy bình thường, trong khi file làm sẵn ở trên lại lỗi. "Có cái gì đó" là cái gì?
(Tôi cũng tình cờ phát hiện khi đang viết code thôi)
 
Upvote 0
Uh, nó ngộ vậy đó. Nếu mình tự xây dựng y chang vậy thì chạy bình thường, trong khi file làm sẵn ở trên lại lỗi. "Có cái gì đó" là cái gì?
(Tôi cũng tình cờ phát hiện khi đang viết code thôi)
NÓ lỗi do cái gì đó Anh
 
Upvote 0
Có tình huống thế này về DialogSheet:
- Mở 1 workbook trắng
- Chèn 1 DialogSheet, mặc định nó có tên là "Dialog1"
- Vào VBA, viết code để show dialogsheet như sau:
Mã:
Sub ShowDialog()
  DialogSheets("Dialog1").Show
End Sub
- Chạy code. Đương nhiên mọi chuyện diễn ra bình thường (sẽ thấy Dialog1 xuất hiện)
----------------------------------
Ấy vậy mà tôi có 1 file (thiết kế y chang như mô tả ở trên) lại báo lỗi khi chạy code

View attachment 200654

Nếu thêm dòng "On Error Resume Next" vào đầu code thì sẽ chạy được
Vấn đề là lỗi từ đâu ra? Mời xem file và tìm nguyên nhân
Mã:
Option Explicit

Sub ShowDialog()
  'On Error Resume Next
  MsgBox "treu nhau chac?"
 
End Sub



Sub HienForm()
    DialogSheets("Dialog1").Show
End Sub

Chạy HienForm là sẽ rõ nguyên nhân, cái này là do có người cố ý can thiệp vào cái dialog1 ( nhìn bằng mắt thường sẽ khó nhận ra), cách chữa thì để mọi người tự tìm vì nó dễ quá.
 
Upvote 0
Mã:
Option Explicit

Sub ShowDialog()
  'On Error Resume Next
  MsgBox "treu nhau chac?"

End Sub



Sub HienForm()
    DialogSheets("Dialog1").Show
End Sub

Chạy HienForm là sẽ rõ nguyên nhân, cái này là do có người cố ý can thiệp vào cái dialog1 ( nhìn bằng mắt thường sẽ khó nhận ra), cách chữa thì để mọi người tự tìm vì nó dễ quá.
thử chơi vầy nó cũng chạy nè ... vui đó ha
Mã:
Sub Show_Dialog()
  'On Error Resume Next
  DialogSheets("Dialog1").Show
End Sub
hay chơi vầy cũng thú vị
Mã:
chạy thằng cha này trước he
Sub Show_Dialog()
  'On Error Resume Next
  DialogSheets("Dialog1").Show
End Sub

Sub ShowDialog()
  'On Error Resume Next
  'DialogSheets("Dialog1").Show
  MsgBox "OK"
End Sub
 
Upvote 0
Cách tạo ra file như #1,325:
- Chèn một DialogSheets("Dialog1");
- Click chọn vào cái khung của Dialog1, menu Developer, View Code;
- Cửa sổ VBA hiện ra, với "Module1" có một Sub:
PHP:
Sub DialogFrame1_Show()

End Sub
- Cái tên Sub vừa được sinh ra nó quy định là tên Sub mặc định sẽ chạy khi Dialog1 được/ bị gọi hiện lên.
=> Vậy không làm gì tới cái Sub vừa được sinh ra ở trên là mọi thứ bình thường.

-----------
Tiện thể gửi tới các anh Admin: Có thể đổi khung giờ GPE 'treo' được không ạ? Hiện tại là 0h00-0h30, đổi vào 3h00-3h300 được không ạ?
(Đã đề nghị nội dung này một lần rồi).
 
Upvote 0
Cách tạo ra file như #1,325:
- Chèn một DialogSheets("Dialog1");
- Click chọn vào cái khung của Dialog1, menu Developer, View Code;
- Cửa sổ VBA hiện ra, với "Module1" có một Sub:
PHP:
Sub DialogFrame1_Show()

End Sub
- Cái tên Sub vừa được sinh ra nó quy định là tên Sub mặc định sẽ chạy khi Dialog1 được/ bị gọi hiện lên.
=> Vậy không làm gì tới cái Sub vừa được sinh ra ở trên là mọi thứ bình thường.
Cách tạo file là y chang như mình đã mô tả ở trên, không phải như cách của bạn
Vấn đề vẫn là câu hỏi: Tại sao phát sinh lỗi?
 
Upvote 0
123.png123.pngThiết lập thuộc tính onAction bằng "" là sẽ khỏi, ở đây sẽ xảy ra một hiện tượng giống như đệ quy mà sinh lỗi, còn cha nội nào thiết lập cái thuộc tính ý thì chịu.
 
Upvote 0
còn cha nội nào thiết lập cái thuộc tính ý thì chịu.
Cha nội đó la tui đó. Tui cố tình làm vậy mới có chuyện để đố chứ
Đúng ra là khi tui đang xây dựng file, trong lúc vô thức đã làm một động tác sai và dẫn đến cái lỗi kia. Thấy cũng là trò vui nên đố chơi
 
Upvote 0
Cha nội đó la tui đó. Tui cố tình làm vậy mới có chuyện để đố chứ
Đúng ra là khi tui đang xây dựng file, trong lúc vô thức đã làm một động tác sai và dẫn đến cái lỗi kia. Thấy cũng là trò vui nên đố chơi
Biết ngay đây là chủ mưu mà, cái này chỉ cần biết gỡ lỗi chút, với chút tinh tường là nhận ra ngay nguyên nhân.
 
Upvote 0
Vậy thì bạn nói luôn đi: "Tôi đã làm gì mà có lỗi như vậy?"
Tức là: ĐÁP ÁN RÕ RÀNG
Cha nội này gàn thật, cứ phải hỏi lấy gốc mà trồng. Đầu tiên tạo sub ShowDialog như bình thường, sau đó quay lại sheet, chuột phải và chọn gán macro, sau đó chọn cái ShowDialog là được, hoặc có thể dùng code để làm việc này.

Vậy đố cha nội này là điều đó có ý nghĩa gì? ( kết luận mang tính kỹ thuật nhá, đừng có phong long đâu đâu).
 
Upvote 0
Cha nội này gàn thật, cứ phải hỏi lấy gốc mà trồng. Đầu tiên tạo sub ShowDialog như bình thường, sau đó quay lại sheet, chuột phải và chọn gán macro, sau đó chọn cái ShowDialog là được, hoặc có thể dùng code để làm việc này
Lời giải phải rõ ràng mới chấp nhận. Ai biết nhiều khi ba xạo thì sao

Vậy đố cha nội này là điều đó có ý nghĩa gì? ( kết luận mang tính kỹ thuật nhá, đừng có phong long đâu đâu).
Cái này thì khỏi cần đố. Bị tôi làm hoài vụ này (nên mới có lúc vô thức rồi làm theo quán tính)
Vì DialogSheet không có các sự kiện nên phải dùng OnAction và thao tác đó tương đương với sự kiện UserForm_Initialize trong UserForm
 
Upvote 0
Cuối tuần mời các bạn thư giãn nhẹ nhàng:
Mình có 2 thư mục như này:

2fol.png
Mỗi thư mục đều chứa file tên là myfile.xlsb
Bây giờ ta đang đứng ở file myfile.xlsb nằm trong thư mục local, mời các bạn thử viết code để chạy các tác vụ:
1/Đóng file myfile.xlsb trong thư mục local.
2/Copy file myfile.xlsb trong thư mục server chép đè vào thư mục local.
3/Mở lại file myfile.xlsb trong thư mục local.

Cám ơn các bạn. --=0--=0
 

File đính kèm

  • thi nghiem.rar
    9.7 KB · Đọc: 11
Upvote 0
Cuối tuần mời các bạn thư giãn nhẹ nhàng:
Mình có 2 thư mục như này:

View attachment 200754
Mỗi thư mục đều chứa file tên là myfile.xlsb
Bây giờ ta đang đứng ở file myfile.xlsb nằm trong thư mục local, mời các bạn thử viết code để chạy các tác vụ:
1/Đóng file myfile.xlsb trong thư mục local.
2/Copy file myfile.xlsb trong thư mục server chép đè vào thư mục local.
3/Mở lại file myfile.xlsb trong thư mục local.

Cám ơn các bạn. --=0--=0
Thêm module với code dưới vào tập tin, không cần lưu lại, sau đó chạy code
Mã:
Sub test()
    Application.DisplayAlerts = False
    ThisWorkbook.ChangeFileAccess xlReadOnly
   
    With CreateObject("Scripting.FileSystemObject")
        .CopyFile Replace(ThisWorkbook.FullName, "\local\", "\server\"), ThisWorkbook.FullName
    End With
    Workbooks.Open ThisWorkbook.FullName
    ThisWorkbook.Close False
    Application.DisplayAlerts = True
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom