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
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
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
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)
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.
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..."
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..."
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.
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ế.
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
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?
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.
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.