Nhờ các thấy chỉ giúp code tự định dạng dấu thập phân và ngày trong Control Panel
Hiện e đang thiết kế 1 chương trình trên excel nhưng lại gặp rắc rối về định dạng dấu phân cách và ngày/tháng/năm
Nay nhờ các thầy giúp em đoạn code tự thiết lập dấu phân cách, dấu thập phân và định dạng ngày/tháng/năm trong Control Panel, cụ thể như sau:
- Decimal symbol là dấu " . "
- Digit grouping symbol là dấu " , "
- Short date là: "dd/mm/yyyy"
Xin cảm ơn rất nhiều
Hiện e đang thiết kế 1 chương trình trên excel nhưng lại gặp rắc rối về định dạng dấu phân cách và ngày/tháng/năm
Nay nhờ các thầy giúp em đoạn code tự thiết lập dấu phân cách, dấu thập phân và định dạng ngày/tháng/năm trong Control Panel, cụ thể như sau:
- Decimal symbol là dấu " . "
- Digit grouping symbol là dấu " , "
- Short date là: "dd/mm/yyyy"
Xin cảm ơn rất nhiều
Rất cảm ơn những ý kiến của bạn, nhưng ở đây mình sử dụng code là vì không phải ai cũng biết cách chỉnh sửa trong control panel, mình thấy thay đổi thiết lập trong CP bằng code sẽ thích hợp trong trường hợp này. Code sẽ đưa ra 1 thông báo cho người dùng biết rằng nếu họ đồng ý với những thay đổi như thế thì code sẽ tự động làm việc thay cho họ.
Ý tưởng là như thế nên rất mong các thầy và các bạn giúp đỡ
... sử dụng code là vì không phải ai cũng biết cách chỉnh sửa trong control panel, mình thấy thay đổi thiết lập trong CP bằng code sẽ thích hợp trong trường hợp này. Code sẽ đưa ra 1 thông báo cho người dùng biết rằng nếu họ đồng ý với những thay đổi như thế thì code sẽ tự động làm việc thay cho họ.
...
Tôi mua cho con tôi một chiếc xe tăng. Khi hàng xóm thắc mắc thì tôi nói "con tôi nó lái xe yếu lắm, sắm xe tăng cho nó chạy đỡ bị móp méo khi cọ quẹt"
Gặp người không biết chỉnh CP mà bảo họ dùng code để chỉnh có khác nào bảo họ giao trứng cho ác? Ví dụ điển hình nhất là nhỡ code bị kẹt gì đó thì làm sao người ta biết tự chỉnh lại? (Code sửa config, chạy xong thì reset lại. Nhưng nếu nó chỉ chạy nửa chừng rồi kẹt thì ai reset?)
tb. Tôi nói chung cho các bạn khác cần học cách sử dụng code. Chứ tôi biết bạn đã quyết ý rồi, có trời mà phân trần.
Rất cảm ơn những ý kiến của bạn, nhưng ở đây mình sử dụng code là vì không phải ai cũng biết cách chỉnh sửa trong control panel, mình thấy thay đổi thiết lập trong CP bằng code sẽ thích hợp trong trường hợp này. Code sẽ đưa ra 1 thông báo cho người dùng biết rằng nếu họ đồng ý với những thay đổi như thế thì code sẽ tự động làm việc thay cho họ.
Ý tưởng là như thế nên rất mong các thầy và các bạn giúp đỡ
Thế sao bạn không viết code cho phù hợp với mọi thiết lập trong Control Panel (nếu bạn chưa viết được thì.. cố suy nghĩ thêm)
Tôi thì rất ghét chương trình nào can thiệp tùm lum trong hệ thống của tôi. Gặp mấy chương trình này, tôi dẹp ngay lập tức
Thế sao bạn không viết code cho phù hợp với mọi thiết lập trong Control Panel (nếu bạn chưa viết được thì.. cố suy nghĩ thêm)
Tôi thì rất ghét chương trình nào can thiệp tùm lum trong hệ thống của tôi. Gặp mấy chương trình này, tôi dẹp ngay lập tức
Tại thấy cái chương trình A-Excel của thầy Nguyễn Duy Tuân có cái tính năng tự chỉnh control panel hay quá với lại cũng cần áp dụng cho chương trình của mình nên mạn phép lên đây học hỏi, mà nhận được nhiều góp ý của mọi người là ko nên sử dụng, thôi đành tự tìm hiểu thôi, cũng xin cảm ơn mọi người đã dành chút thời gian ghé qua và cho ý kiến, xin chân thành cảm ơn
Tại thấy cái chương trình A-Excel của thầy Nguyễn Duy Tuân có cái tính năng tự chỉnh control panel hay quá với lại cũng cần áp dụng cho chương trình của mình nên mạn phép lên đây học hỏi, mà nhận được nhiều góp ý của mọi người là ko nên sử dụng, thôi đành tự tìm hiểu thôi, cũng xin cảm ơn mọi người đã dành chút thời gian ghé qua và cho ý kiến, xin chân thành cảm ơn
Sau khi nhận được góp ý của 2 bậc tiền bối là siwtom và ndu96081631 mà thấy bạn còn rất quyết tâm. Nên trước tiên mình xin phép siwtom và ndu96081631 cho mình đưa đoạn code, có thể đáp ứng được yêu cầu của bạn. Tốt nhất là trước khi chạy chương trình của bạn, thì bạn hãy lưu lại những thiết lập mà bạn sẽ thay đổi để khi thoát chương trình thì bạn trả về giá trị cũ.
Mã:
Sub SetCP()
Const HKEY_CURRENT_USER = &H80000001
Set objReg = GetObject("winmgmts:\root\default:StdRegProv")
strKeyPath = "Control Panel\International"
'Decimal symbol
strValueName1 = "sDecimal"
strValue1 = "."
'Digit grouping symbol
strValueName2 = "sThousand"
strValue2 = ","
'Short date
strValueName3 = "sShortDate"
strValue3 = "dd/MM/yyyy"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName1, strValue1
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName2, strValue2
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName3, strValue3
End Sub
... Tốt nhất là trước khi chạy chương trình của bạn, thì bạn hãy lưu lại những thiết lập mà bạn sẽ thay đổi để khi thoát chương trình thì bạn trả về giá trị cũ.
...
Đáng lẽ code của bạn nên chứa luôn phần ghi lại giá trị hiện hành và trả về sau khi không cần nữa.
Tuy nhiên tôi đã cảnh báo làm cái này cũng như lái xe tăng trên đường phố. Nó không giản dị "đổi giá trị cho thích hợp, xài xong thì trả về giá trị cũ" đâu!
- Nếu trong lúc bạn đang chạy code này, bạn đồng thời cũng có một chương trình khác thì sao? Cái gì đảm bảo cho bạn là chương trình thứ 2 không bị ảnh hưởng?
- Ngược lại, nếu trong lúc bạn đang chạy code này nhưng có một chương trình khác đổi nó đi thì sao? Bạn đã có 1 chương trình can thiệp vào Control Panel thì ai có thể đảm bảo là bạn không có chương trình thứ 2 cũng can thiệp?
Tôi không đặt vấn đề ở chỗ dễ hay khó, làm được hay không được.
Tôi chủ ý đặt câu hỏi "người ra sáng kiến có suy nghĩ về quy mô và giới hạn của công việc chưa?"
Mình nghĩ khi nào thoát phần mềm thì người ta mới không cần dùng nữa. Hơn nữa vì thấy bạn ấy rất quyết tâm và chưa làm được nên mới đưa đoạn code thôi. Thành thật xin lỗi, có gì nhờ MOD xóa giúp. Thanks!
Tại thấy cái chương trình A-Excel của thầy Nguyễn Duy Tuân có cái tính năng tự chỉnh control panel hay quá với lại cũng cần áp dụng cho chương trình của mình nên mạn phép lên đây học hỏi, mà nhận được nhiều góp ý của mọi người là ko nên sử dụng, thôi đành tự tìm hiểu thôi, cũng xin cảm ơn mọi người đã dành chút thời gian ghé qua và cho ý kiến, xin chân thành cảm ơn
1. Thay đổi bằng code các thiết lập
2. Thông báo cho các ứng dụng trong system là đã có sự thay đổi để chúng cập nhật.
Ta xét 1 ví dụ.
Giả sử giờ nghỉ trưa được ghi trên bảng. Và giờ nghỉ trưa này có thể thay đổi. Như vậy mỗi nhân viên khi đến cơ quan sẽ kiểm tra giờ nghỉ trưa trong ngày. Nếu trước giờ nghỉ trưa sếp quyết định thay đổi giờ nghỉ trưa hôm đó thì sau khi sửa đổi phải thông báo cho mọi người biết để họ "cập nhật" kế hoạch của mình.
Khi ta thay đổi trực tiếp trong CP thì các applet *.cpl sẽ gửi thông điệp tới tất cả các ứng dụng trong system. Khi ta dùng code thay đổi các thiết lập thì tự ta phải gửi thông điệp, không ai làm hộ ta cả.
Nếu ta không gửi thông điệp thì sau khi thay đổi phải đóng Excel và mở lại thì những dữ liệu đã có trên sheet mới cập nhật vì Excel đọc các thiết lập trong system khi khởi động. Mà không gửi thông điệp cũng có nghĩa là các ứng dụng khác trong system không biết để mà cập nhật.
Cũng cần nói về các cảnh báo của bạn VetMini. Đã làm thì phải làm cho chuẩn. Tất nhiên bạn chỉ có thể làm tròn bổn phận của mình thôi. Còn nếu có 1 ứng dụng nào đó thay đổi thiết lập nhưng không thông báo cho các ứng dụng khác biết để cập nhật thì bạn cũng bó tay, làm sao can thiệp được.
Người ta không thông báo thì Excel của bạn không cập nhật, thế thôi. Vậy nếu bạn đã làm thì phải thông báo, phải làm tròn phần việc của mình.
Để cập nhật mà không cần đóng và mở lại Excel thì tôi đã thử gửi thông điệp
Nhưng các dữ liệu đã có trên sheet không cập nhật.
Tất nhiên nếu ta viết program trong vd. VB và chỉ có 1 dòng code như trên thì khi kích hoạt EXE thì Excel tự cập nhật mà không cần đóng / mở.
Như vậy nếu ta "đứng ở ngoài Excel" và "loa loa, đã có thay đổi" thì Excel cập nhật bình thường (và tất nhiên mọi ứng dụng trong system cũng thế). Nhưng nếu ta "đứng ở trong Excel" và "loa loa, đã có thay đổi" thì Excel lại không cập nhật.