Button chạy macro exel

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Hongduc39hnk

Thành viên mới
Tham gia
2/1/23
Bài viết
6
Được thích
2
Em đang gắn cái code này cho cái nút button để khi cần bấm vào sẽ lấy ngày, nhưng đôi khi người khác mở file lên vào 1 ngày khác lỡ tay bấm vào nút button đó thì nó lại lấy lại ngày khác, mình có cách nào cho nút button bấm 1 lần or là cho macro chỉ chạy 1 lần duy nhất khi lấy ngày không ạ.

Private Sub CommandButton1_Click()
Range("E3:H3").Value = Date
End Sub
 
.
Mã:
If WorksheetFunction.CountA(Range("E3:H3")) = 0 Then
Range("E3:H3").Value = Date
End If
 
Upvote 0
Khi lấy ngày lần đầu là khi nào?
Mã:
Private Sub CommandButton1_Click()
if Range("I3").value = "" Then
    Range("E3:H3").Value = Date
    Range("I3").value = 1
End If
End Sub
 
Upvote 0
Khi lấy ngày lần đầu là khi nào?
Mã:
Private Sub CommandButton1_Click()
if Range("I3").value = "" Then
    Range("E3:H3").Value = Date
    Range("I3").value = 1
End If
End Sub
là vi dụ hôm mình mở file nhập liệu bấm lấy ngày 5/1, nhừng qua ngày 7/1 có 1 người khac mở file lên bấm nhầm vào nút ấy thì lại chuyển qua lấy ngày 7/1
Bài đã được tự động gộp:

.
Mã:
If WorksheetFunction.CountA(Range("E3:H3")) = 0 Then
Range("E3:H3").Value = Date
End If
ui hay quá bác ơi, em cám ơn ạ. đúng ý em luôn. theo em đọc thì hiểu sơ sơ thì nếu E3:H3 không có gia trị thì sẽ count date
 
Upvote 0
Code chỉ chạy 1 lần và dữ liệu cũng chỉ là nhập 1 ngày thì code làm gì?
Nhập trực tiếp cho xong sao còn màu mè thế?!
 
Upvote 0
là vi dụ hôm mình mở file nhập liệu bấm lấy ngày 5/1, nhừng qua ngày 7/1 có 1 người khac mở file lên bấm nhầm vào nút ấy thì lại chuyển qua lấy ngày 7/1
Ý bạn là nhấn khi mở file? Lúc đó sao có sẵn 1 file chưa có ngày để mở? Vậy câu hỏi tiếp theo là ở đâu có cái file mà chưa có ngày?
ui hay quá bác ơi, em cám ơn ạ. đúng ý em luôn. theo em đọc thì hiểu sơ sơ thì nếu E3:H3 không có gia trị thì sẽ count date
Thế nếu người dùng xóa E3:H3 rồi nhấn thì sao?
 
Upvote 0
...
Thế nếu người dùng xóa E3:H3 rồi nhấn thì sao?
Chủ ý là vậy.
Chứ nếu không cho bấm lần thứ hai thì đã dùng code khác, lặn cái button chẳng hạn.

Chú: code bài #2 và #3
Code hơi quá giản dị. Thằng nào tò mò bấm hoài chả thấy gì suy chuyển, và đặt câu hỏi "cái nút ấy làm gì vậy ta?"
 
Lần chỉnh sửa cuối:
Upvote 0
Chủ ý là vậy.
Chứ nếu không cho bấm lần thứ hai thì đã dùng code khác, lặn cái button chẳng hạn.
Chủ ý ở bài 1 là "chỉ chạy 1 lần duy nhất khi lấy ngày" (sic).
Chủ ý của tôi khi hỏi "Khi lấy ngày lần đầu là khi nào?" là lấy ngày khi tạo sheet trắng, hay khi nhận file có ô E3:H3 đang trắng, hay như thế nào?
Chủ ý của tôi khi hỏi "nếu người dùng xóa E3:H3 rồi nhấn thì sao?" là nói về code bài 2 (CountA)
Chủ ý của tôi khi trả lời bài 3 là dùng 1 ô/ range trên bảng tính để kiểm soát người dùng.

Mã:
Private Sub CommandButton1_Click()
if Range("I3").value = "" Then
    Range("E3:H3").Value = Date
    Range("I3").value = Date
End If
End Sub
Ô này giấu kỹ và người dùng không thấy. Khi người dùng trả file về mà E3:H3 không giống ô kiểm soát, hoặc bỏ trống, thì tôi mắng cho. (Đang giả dịnh là người dùng không biết code kiết, không biết vọc phá.

Chứ nếu không cho bấm lần thứ hai thì đã dùng code khác, lặn cái button chẳng hạn.
Chú: code bài #2 và #3
Code hơi quá giản dị. Thằng nào tò mò bấm hoài chả thấy gì suy chuyển, và đặt câu hỏi "cái nút ấy làm gì vậy ta?"
Tôi đang giả định là cái nút nhấn vào làm nhiều hơn 1 việc, riêng việc điền ngày có điều kiện chỉ chạy 1 lần, các việc khác thì không.
Do đó tôi không viết code "lặn cái button". Lại là quá giản dị.
Mã:
Private Sub CommandButton1_Click()
    Range("E3:H3").Value = Date
    CommandButton1.Visible = False
End Sub
Code bài 3 không làm gì mà nhấn hoài thì không suy chuyển, nhưng nếu cố tình xóa, sửa rồi nhấn nút là có chuyện với tôi (chủ file giao việc)
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
em cũng chả hiểu ý muốn của tác giả lắm.
Những thông tin còn thiếu thì cần phải hỏi lại hoặc chờ bổ sung, nhưng những tình huống khi chạy code có thể lường trước, ví dụ "xóa rồi mới nhấn"
 
Upvote 0
Đồng chí này chắc là biết vba. Khả năng Đây chỉ là một ý trong cả công trình thôi.
Các ý của bác nếu gặp sẽ hỏi tiếp ấy mà, dần dần mới hoàn chỉnh được.
Dân nhờ code vẫn vậy. Họ chỉ có cái "sáng kiến" thôi. Vì chưa thực hiện được cho nên họ không hề nghĩ tới hậu quả. Chuyện "tự động để giảm thủ công" đầu này gây đến rắc rối cho đầu khác nằm ngoài tầm suy nghĩ của họ.
Vả lại nhờ làm giùm thì có mất gì đâu. Họ cứ việc chế biến.

Em chỉ viết được mấy cái giản dị thế thôi, với lại em cũng chả hiểu ý muốn của tác giả lắm. Nếu cần, em cứ today, dán value là xong.
Thớt không biết cách làm Ctrl+Enter.
Đã nói nhờ viết code VBA dễ quá nên người tra đâm lười, không chịu học thao tác căn bản của Excel.

Những thông tin còn thiếu thì cần phải hỏi lại hoặc chờ bổ sung, nhưng những tình huống khi chạy code có thể lường trước, ví dụ "xóa rồi mới nhấn"
Thớt chỉ thử code chứ khogn biết thực hành cho nên không biết là tối thiểu cũng phải có một hộp thoại hiện lên:
"Ngay đa duoc ghi roi. Neu can thay doi thi van van va van van..."
 
Upvote 0
Thớt chỉ thử code chứ khogn biết thực hành cho nên không biết là tối thiểu cũng phải có một hộp thoại hiện lên:
"Ngay đa duoc ghi roi. Neu can thay doi thi van van va van van..."
Vụ xóa rồi mới nhấn thì tôi không nói "thớt", tôi nói code bài 2
 
Upvote 0
Chỉ dẫn cho các bạn chưa biết cách nhập ngày vào một range:

- Bôi đen (select) vùng cần nhập Ở bài này là vùng E3:H3
- Gõ Ctrl+; (dấu chấm phẩy)
- Gõ Ctrl+Enter. Ngỳ hôm nay sẽ ddpowcj ghi vào các ô E3:H3

Tôi lười viết code VBA lắm. Đồng thời tôi cũng không thích vì một công việc nhỏ nhặt mà cái file từ xlsx trở thành xlsm. Vì vậy tôi biết rất nhiều cách làm việc thủ công với Excel.
Hình như bà con có thối quen dùng file chứa macro xả láng, không hề nể vi rút.
 
Upvote 0
Vụ xóa rồi mới nhấn thì tôi không nói "thớt", tôi nói code bài 2
Vì đề đơn giản nên code cũng đơn giản bác ạ.
Chứ để hỏi rõ, hoàn chỉnh thì nhiều tình huống. Eo, lúc đấy phức tạp thì em bó tay.
Mỏi tay lắm bác. Chuyển "," thành ";" em cũng muốn dùng VBA. Bấm 1 phát rẹt rẹt. Khoái. :wallbash: :wallbash: :wallbash:
 
Upvote 0
Vì đề đơn giản nên code cũng đơn giản bác ạ.
Chứ để hỏi rõ, hoàn chỉnh thì nhiều tình huống. Eo, lúc đấy phức tạp thì em bó tay.

Mỏi tay lắm bác. Chuyển "," thành ";" em cũng muốn dùng VBA. Bấm 1 phát rẹt rẹt. Khoái. :wallbash: :wallbash: :wallbash:
Gõ code hỏng mỏi tay hở? """:::":\
Bạn có đếm thử bao nhiêu ký tự và bao nhiêu cái click chuột chưa?
Và code này chỉ dùng 1 lần. Không hề dùng lại. Nếu muốn dùng lại thì phải xóa chỗ cũ rồi mới bầm nhut được: bao nhiêu động tác? -.,\;
ã nói là thớt chỉ có "sáng kiến" chứ chưa biết thực tế.
 
Upvote 0
Chủ ý ở bài 1 là "chỉ chạy 1 lần duy nhất khi lấy ngày" (sic).
Chủ ý của tôi khi hỏi "Khi lấy ngày lần đầu là khi nào?" là lấy ngày khi tạo sheet trắng, hay khi nhận file có ô E3:H3 đang trắng, hay như thế nào?
Chủ ý của tôi khi hỏi "nếu người dùng xóa E3:H3 rồi nhấn thì sao?" là nói về code bài 2 (CountA)
Chủ ý của tôi khi trả lời bài 3 là dùng 1 ô/ range trên bảng tính để kiểm soát người dùng.

Mã:
Private Sub CommandButton1_Click()
if Range("I3").value = "" Then
    Range("E3:H3").Value = Date
    Range("I3").value = Date
End If
End Sub
Ô này giấu kỹ và người dùng không thấy. Khi người dùng trả file về mà E3:H3 không giống ô kiểm soát, hoặc bỏ trống, thì tôi mắng cho. (Đang giả dịnh là người dùng không biết code kiết, không biết vọc phá.


Tôi đang giả định là cái nút nhấn vào làm nhiều hơn 1 việc, riêng việc điền ngày có điều kiện chỉ chạy 1 lần, các việc khác thì không.
Do đó tôi không viết code "lặn cái button". Lại là quá giản dị.
Mã:
Private Sub CommandButton1_Click()
    Range("E3:H3").Value = Date
    CommandButton1.Visible = False
End Sub
Code bài 3 không làm gì mà nhấn hoài thì không suy chuyển, nhưng nếu cố tình xóa, sửa rồi nhấn nút là có chuyện với tôi (chủ file giao việc)
Chủ ý ở bài 1 là "chỉ chạy 1 lần duy nhất khi lấy ngày" (sic).
Chủ ý của tôi khi hỏi "Khi lấy ngày lần đầu là khi nào?" là lấy ngày khi tạo sheet trắng, hay khi nhận file có ô E3:H3 đang trắng, hay như thế nào?
Chủ ý của tôi khi hỏi "nếu người dùng xóa E3:H3 rồi nhấn thì sao?" là nói về code bài 2 (CountA)
Chủ ý của tôi khi trả lời bài 3 là dùng 1 ô/ range trên bảng tính để kiểm soát người dùng.

Cụ thể là như thế này ạ:
Em tao 1 from mẫu và copy ra nhiều sheet giống nhau, mỗi sheet tương ứng 1 ngày, vi dụ sheet1 ngày 1-2, sheet 2-2, sheet3 3.-2.... nhưng vao ngày 10-2 có người nào đó cần xem lại thông tin của ngày 1 thì mở lại sheet1 lỡ bấm button thì theo code của em ở bài đầu thì no sẽ lấy ngày 10-2 thay vì 1-2
 
Upvote 0
Đặt tên sheet là ngày.
Code lấy ngày là tên sheet.
 
Upvote 0
Vì đề đơn giản nên code cũng đơn giản bác ạ.
Chứ để hỏi rõ, hoàn chỉnh thì nhiều tình huống.
Bạn không hiểu tôi viết tình huống nghĩa là gì rồi. Đề đơn giản thì code đơn giản, đúng. Nhưng khi viết code sử dụng CountA làm điều kiện, thì sinh ra tình huống là người dùng "xóa rồi nhấn", lúc này code bạn viết trở nên vô nghĩa, không đạt yêu cầu của đề, vì không ràng buộc được việc giữ nguyên ngày ban đầu. Đó là tình huống của code, không phải tình huống của đề, và là trách nhiệm của người viết code.
Em tao 1 from mẫu và copy ra nhiều sheet giống nhau, mỗi sheet tương ứng 1 ngày, vi dụ sheet1 ngày 1-2, sheet 2-2, sheet3 3.-2.... nhưng vao ngày 10-2 có người nào đó cần xem lại thông tin của ngày 1 thì mở lại sheet1 lỡ bấm ...
Bạn cũng chẳng hiểu câu hỏi. Copy ra sheet mới rồi, bạn phải trả lời: khi nào điền ngày lần đầu vào?
Bản thân bạn không lường được tình huống. Bạn copy sheet có ngày 01/02 thành sheet mới, thì ngày đã có sẵn là 01/02. Nếu có code "nhấn vào không đổi" thì làm sao bạn có ngày 02/02 trong sheet mới?
Chỉ dẫn cho các bạn chưa biết cách nhập ngày vào một range:

- Bôi đen (select) vùng cần nhập Ở bài này là vùng E3:H3
- Gõ Ctrl+; (dấu chấm phẩy)
- Gõ Ctrl+Enter. Ngỳ hôm nay sẽ ddpowcj ghi vào các ô E3:H3
Tôi cũng không chủ trương dùng code cho chủ đề này, tuy nhiên cũng muốn giới thiệu cho nhiều người mới học cách kiểm soát người dùng bằng 1 ô/range kiểm soát. Cách kiểm soát này dùng kiểm soát thêm, xóa sửa nói chung cho nhiều việc chứ không chỉ là nhập liệu 1 dữ liệu ngày.
 
Upvote 0
Vâng, cơ bản em mót theo kiểu ăn xổi nên không được bài bản, cứ thấy ra kết quả là mãn nguyện. Em cũng không thích dùng hàm worksheet, nhưng không nghĩ ra được cách khác.
Nhiều khi gặp code ra đúng nhu cầu của mình là được, cũng không để ý người viết có xét đủ tình huống chưa.
VD món ưa thích của em là chuyển dấu công thức, lúc đầu em chỉ cần chuyển dấu ",". Sau khi xong, thì phát sinh dấu ";" trong mảng. Giờ xong rồi, lại phát sinh dấu "." của số thập phân. Có tham khảo code của bạn bi, nhưng không áp dụng được.
Em cũng biết kiểm soát tình huống đầy đủ là tuyệt vời rồi, nhưng sức em có hạn, không thể nghĩ hết được. Bản thân em cũng không phải là người có đầu óc tư duy toán học, tư duy phân tích.
Em cũng muốn viết thử cho nó tử tế (VD món quản lý văn bản), nhưng khi gặp code dài quá thì ối giời ơi, không dịch được sang tiếng Việt.

PS: Bác lại xóa bài giải trí của em zồi.
 
Upvote 0
Web KT

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

Back
Top Bottom