Đố 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
 
Làm gì mà bực bội vậy Anh ...Anh nói chỗ màu đỏ hới quá đáng rồi đó

Cũng hơi quá lời. Thành thực xin lỗi.
Nhưng tôi dị ứng với những người quá mạnh miệng. Một khi có người đi tiên phong, vẽ ra hướng đi rồi thì ông nào cũng mạnh miệng được.
 
Upvote 0
Cũng hơi quá lời. Thành thực xin lỗi.
Nhưng tôi dị ứng với những người quá mạnh miệng. Một khi có người đi tiên phong, vẽ ra hướng đi rồi thì ông nào cũng mạnh miệng được.
Em biết mà ...tại Em nói ẩu bài đó thôi ...thôi bỏ qua đi Anh ...Mong lâu lâu Anh viết một code cho Em học với

Mong các Thành Viên GPE không Tám qua Tám lại vấn đề này nữa ...ko vui vẻ gì đâu...

Cảm ơn Anh
 
Upvote 0
Cũng hơi quá lời. Thành thực xin lỗi.
Nhưng tôi dị ứng với những người quá mạnh miệng. Một khi có người đi tiên phong, vẽ ra hướng đi rồi thì ông nào cũng mạnh miệng được.

Chào anh siwtom
Ý tưởng ban đầu là cái đáng được tôn trọng . Tôi làm ra câu hỏi này là dựa trên ý tưởng của anh siwtom , tôi rất trân trọng ý tưởng của anh . Nếu có gây ra sự khó chịu nơi anh thì đó là do sự thiếu minh bạch của tôi vì đã không nêu rõ ý tưởng của anh , không phải do tôi cố ý , nhưng vì tôi không biết những người ở trên lấy ý tưởng đâu ra ? tôi không áp đặt được . Nhưng tôi vẫn nhận sai với anh , mong anh bỏ qua . Tôi không muốn vì chuyện này mà mọi chuyện lại đi xa hơn theo chiều hướng căng thẳng hơn .
 
Upvote 0
Chào anh siwtom
Ý tưởng ban đầu là cái đáng được tôn trọng . Tôi làm ra câu hỏi này là dựa trên ý tưởng của anh siwtom , tôi rất trân trọng ý tưởng của anh . Nếu có gây ra sự khó chịu nơi anh thì đó là do sự thiếu minh bạch của tôi vì đã không nêu rõ ý tưởng của anh , không phải do tôi cố ý , nhưng vì tôi không biết những người ở trên lấy ý tưởng đâu ra ? tôi không áp đặt được . Nhưng tôi vẫn nhận sai với anh , mong anh bỏ qua . Tôi không muốn vì chuyện này mà mọi chuyện lại đi xa hơn theo chiều hướng căng thẳng hơn .

OK ...vậy là tốt rồi cẳng thẳng mệt lắm +-+-+-+--=0....cảm ơn Bạn

Mạnh cũng nhận Sai là Phát Ngôn ẩu gây xốc bài #1168.....Rút kinh nghiệm lần sau phát ngôn lại
 
Lần chỉnh sửa cuối:
Upvote 0
đúng đó Anh ...nếu Em viết cho Một Sub thì Em Set 1 cái Fso là xong ...

Còn trong một dự Án VB thì Em lại thích viết ra 1 hàm và xài nó cho vài cái khác nữa chẳng Hạn ...
đáp án của Em
Mã:
Private Function GetShortPath(ByVal FilePath As String)
    With CreateObject("Scripting.FileSystemObject")
        GetShortPath = .GetFile(FilePath).ShortPath
    End With
End Function

Private Sub CommandButton1_Click()
    Dim filename As String
    index = (index Mod 2) + 1
    filename = GetShortPath(ThisWorkbook.path & "\images\" & index & ".jpg")
    Image1.Picture = LoadPicture(filename)
End Sub
Sử dụng có 1 dòng code dùng With hay Set làm quái gì cho mệt đồng chí ơi! Như vầy luôn cho gọn:

CreateObject("Scripting.FileSystemObject").GetFile(FilePath).ShortPath


P/s: Viết xong mới thấy bài viết này:

Dự án lớn thì các hàm viết nên khai báo kiểu trả về của hàm. Không nên buộc ngừoi dùng phải dựa vào tên hàm để đoán kiểu trả về.

Cái này sẽ giúp cho intellisense dễ đọc hơn.

Vả lại, nối object chỉ 1 dòng thì With làm chi cho mệt. Cứ nối thẳng luôn.
myPath = CreateOjbect(...).Get...
 
Lần chỉnh sửa cuối:
Upvote 0
Sử dụng có 1 dòng code dùng With hay Set làm quái gì cho mệt đồng chí ơi! Như vầy luôn cho gọn:

CreateObject("Scripting.FileSystemObject").GetFile(FilePath).ShortPath


P/s: Viết xong mới thấy bài viết này:
Thì bài #1179 viết rồi đó
Mã:
Private Function GetShortPath(FilePath)
    GetShortPath = CreateObject("Scripting.FileSystemObject").GetFile(FilePath).ShortPath
End Function

Lâu này nghĩa đi pháp À ...thấy văng vắng--=0
 
Upvote 0
Xin đố các bạn là làm sao đếm được trên máy mình mở bao nhiêu Excel section (Có nghĩa là trong các workbook đó mình không thể nhìn thấy trong Switch Windows)?
 
Upvote 0
Xin đố các bạn là làm sao đếm được trên máy mình mở bao nhiêu Excel section (Có nghĩa là trong các workbook đó mình không thể nhìn thấy trong Switch Windows)?

Muốn code gì thì cũng phải thử nghiệm. Ác cái là từ ngày mình dung Windows 10 + Office 2016, mình không biết cách nào để mở 2 sessions excel (trước đây làm chuyện này dễ dàng bằng cách cứ bấm Start, chọn biểu tượng Excel là có ngay 1 session mới)
 
Upvote 0
Muốn code gì thì cũng phải thử nghiệm. Ác cái là từ ngày mình dung Windows 10 + Office 2016, mình không biết cách nào để mở 2 sessions excel (trước đây làm chuyện này dễ dàng bằng cách cứ bấm Start, chọn biểu tượng Excel là có ngay 1 session mới)

anh ơi cho em hỏi , session excel là gì ạ ? thật sự em không biết . Từ chỗ biết mới tìm cách giải được chứ ạ . +-+-+-+ +-+-+-+
 
Upvote 0
anh ơi cho em hỏi , session excel là gì ạ ? thật sự em không biết . Từ chỗ biết mới tìm cách giải được chứ ạ . +-+-+-+ +-+-+-+

Bấm Ctrl + Alt + Del, xem trong Task Manager, thấy xuất hiện 2 thằng Excel.exe thì gọi là 2 sessions
Với người dùng thông thường thì có cách nhận dạng đơn giản: Nếu 2 files được mở bằng 2 sessions thì file này sẽ không thể tham chiếu đến file kia (từ file này gõ dấu = vào 1 cell sẽ không thể tham chiếu được với bất cứ cell nào của file kia)
 
Lần chỉnh sửa cuối:
Upvote 0
Muốn code gì thì cũng phải thử nghiệm. Ác cái là từ ngày mình dung Windows 10 + Office 2016, mình không biết cách nào để mở 2 sessions excel (trước đây làm chuyện này dễ dàng bằng cách cứ bấm Start, chọn biểu tượng Excel là có ngay 1 session mới)

Anh thử cách sau:
Vào RUN gõ: excel /x rồi enter

Xin đố các bạn là làm sao đếm được trên máy mình mở bao nhiêu Excel section (Có nghĩa là trong các workbook đó mình không thể nhìn thấy trong Switch Windows)?
Ở workbook nào đó thì khi vào Switch Windows không thấy workbook khác, chỉ thấy chính nó.
 
Upvote 0
Upvote 0

Cũng được nhưng mà dài quá!
Ở topic khác thì file của bạn xem được đạt yêu cầu nhưng ở đây là đố vui nên phải có gì đó độc đáo hoặc ít nhất là ngắn gọn
(tôi làm bài này chỉ với 4 dòng code nhưng vẫn không chắc nó có "vui" hoặc "độc đáo" không nữa)
 
Upvote 0
Cũng được nhưng mà dài quá!
Ở topic khác thì file của bạn xem được đạt yêu cầu nhưng ở đây là đố vui nên phải có gì đó độc đáo hoặc ít nhất là ngắn gọn
(tôi làm bài này chỉ với 4 dòng code nhưng vẫn không chắc nó có "vui" hoặc "độc đáo" không nữa)

mình chơi nốt nhạc vui đi anh : 3 dòng . (có bao gồm sub và end Sub ) +-+-+-++-+-+-+ +-+-+-+
 
Upvote 0
Cũng được nhưng mà dài quá!
Ở topic khác thì file của bạn xem được đạt yêu cầu nhưng ở đây là đố vui nên phải có gì đó độc đáo hoặc ít nhất là ngắn gọn
(tôi làm bài này chỉ với 4 dòng code nhưng vẫn không chắc nó có "vui" hoặc "độc đáo" không nữa)

Cảm ơn anh. Em chỉ mần được vậy thôi.

Hóng bài của anh...
 
Upvote 0
Xin đố các bạn là làm sao đếm được trên máy mình mở bao nhiêu Excel section (Có nghĩa là trong các workbook đó mình không thể nhìn thấy trong Switch Windows)?

cuối năm giải quyết hàng tồn còn đi ăn tết , ý anh là đếm coi có bao nhiêu process đang chạy có tên là excel.exe ? vậy ta dùng lệnh

Mã:
GetObject("winmgmts:").ExecQuery("Select * from Win32_Process Where Name = 'EXCEL.EXE'").Count
 
Upvote 0
Web KT

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

Back
Top Bottom