Giúp mình về định dạng ngày tháng với!

Liên hệ QC
Hi hi, vậy trong khi chờ đợi giải pháp tối ưu, em xin đưa ra cách làm thay đổi Regional Settings ở "trong rừng" của em nhé.
Mở Regional bằng câu lệnh Call Shell("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1") và kết hợp với lệnh Sendkey.

Thân!
TDN
 
Chỉnh sửa lần cuối bởi điều hành viên:
Ít ra cũng thế chứ... nói nhiều ko bằng 1 LÀM...
Thầy Phước ơi: nếu như để trích xuất date setting trong registry và import lại bằng file .REG thì tôi biết, còn làm nó bằng Excel thì sao? Bạn viết ngắn gọn quá tôi cũng ko biết phải làm thế nào... Có thể cho 1 file VD thật ngắn gọn dc ko? Đại khái nó phải làm dc như sau:
1> Máy tính tôi đang setting cái gì ko cần biết, nhưng khi chạy file excel thì nó tự động chuyển sang dd/mm/yy
2> Sau khi thoát khỏi excel thì trả về setting ban đầu (phần này có càng tốt, ko có cũng ko sao)
Mến
ANH TUẤN
 
Gởi anh Tuấn
1/ Trước mắt anh thử dùng đoạn code này để cài "dd/MM/yyyy"
Mã:
Sub RegionalSettings()
    Shell ("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0")
    SendKeys "{Tab}"
    SendKeys "{Enter}"
    SendKeys "+{Tab}"
    SendKeys "{Right}{Right}{Right}{Right}{Tab}{Tab}"
    SendKeys "{d}{d}{/}{M}{M}{/}{y}{y}{y}{y}"
    SendKeys "{Enter}"
    SendKeys "{Tab}{Tab}{Enter}"
End Sub
2/ Còn việc khôi phục lại Setting ban đầu thì em chưa nghĩ ra, để em cố gắng nghĩ thêm. Hi hi

@ Anh dạy em cách trích xuất date setting trong registry và import lại bằng file .REG với. Cái này em hỏng biết. hi hi

Thân!
TDN
 
Lần chỉnh sửa cuối:
Một số API làm việc với Registry

Mã:
'// Registry API declarations
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long

Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, hKeyHandle As Long) As Long

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Code làm việc với Registry có rất nhiều trên Internet (nhiều đến mức ko đếm xuể) nên tớ nghĩ ko cần chỉ rõ cách Google thế nào.

Khi mình export cái đoạn cần export ra file reg. Dùng notepad để view xem key và value nó là gì.

Tuy nhiên, nếu dùng Registry thì có thể (thông thường) nó ko take effect ngay lập tức.

Và không ai dùng
Shell ("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0")
Rồi send mấy cái Tab như trên cả.

Đoạn code ở bài trước của tớ rõ như trong tranh rồi cơ mà. Mình ko hiểu phải giúp thế nào để có thể rõ hơn nữa. Thực sự sợ rồi. Post bài mà ko dám quay lại đọc nữa.
 
Lần chỉnh sửa cuối:
Thực ra khi viết bài này tôi cũng chưa từng làm công việc Import và Export Regional Language Options vào Registry nhưng tôi biết hướng làm... Ngay khi đọc bài của bạn tôi bắt tay vào làm ngay... Quy trình công việc tôi thực hiện như sau (tự bạn cũng có thể làm dc)
1> Start\Run\Regedit
2> Chọn My Computer, bấm Ctrl + F gõ vào dd/MM/yy (cái này tùy máy bạn à nha, nếu máy tính bạn đang set MM/dd/yy thì gõ vào MM/dd/yy)... Mục đích là tìm ra dc cái KEY chứa thông tin về Regional Language Options
3> Enter cho nó tìm, và trên máy tính của tôi, nó đã tìm dc đến đường dẩn sau đây:
[HKEY_CURRENT_USER\Control Panel\International]
4>Right click trên key International chọn Export, đặt tên và lưu file này vào 1 nơi nào đó... Xong thao tác EXPORT
5> Bây giờ Right click trên file .REG vừa lưu, chọn Edit... File dc mở ra trong cửa sổ Notepad, bạn thích đổi cái gì thì tùy bạn... Chẳng hạn trong trường hợp này tôi đổi MM/dd/yy thành dd/MM/yy
6> Đóng và lưu file lại... Tiếp tục Right click trên file, chọn Merge... OK 2 lần
Vậy là bạn vừa làm xong thao tác IMPORT thông tin mình muốn vào Registry rồi đấy! hi... hi... Ko tin bạn cứ vào Control Panel kiểm tra thử... Chắc ăn 100%
Tôi Export sẳn file, bạn có thể tải về nghiên cứu
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Thực ra khi viết bài này tôi cũng chưa từng làm công việc Import và Export Regional Language Options vào Registry nhưng tôi biết hướng làm... Ngay khi đọc bài của bạn tôi bắt tay vào làm ngay... Quy trình công việc tôi thực hiện như sau (tự bạn cũng có thể làm dc)
1> Start\Run\Regedit
2> Chọn My Computer, bấm Ctrl + F gõ vào dd/MM/yy (cái này tùy máy bạn à nha, nếu máy tính bạn đang set MM/dd/yy thì gõ vào MM/dd/yy)... Mục đích là tìm ra dc cái KEY chứa thông tin về Regional Language Options
3> Enter cho nó tìm, và trên máy tính của tôi, nó đã tìm dc đến đường dẩn sau đây:
[HKEY_CURRENT_USER\Control Panel\International]
4>Right click trên key International chọn Export, đặt tên và lưu file này vào 1 nơi nào đó... Xong thao tác EXPORT
5> Bây giờ Right click trên file .REG vừa lưu, chọn Edit... File dc mở ra trong cửa sổ Notepad, bạn thích đổi cái gì thì tùy bạn... Chẳng hạn trong trường hợp này tôi đổi MM/dd/yy thành dd/MM/yy
6> Đóng và lưu file lại... Tiếp tục Right click trên file, chọn Merge... OK 2 lần
Vậy là bạn vừa làm xong thao tác IMPORT thông tin mình muốn vào Registry rồi đấy! hi... hi... Ko tin bạn cứ vào Control Panel kiểm tra thử... Chắc ăn 100%
Tôi Export sẳn file, bạn có thể tải về nghiên cứu
Mến
ANH TUẤN
Đó là cách bạn làm kiểu manual (bằng tay chứ không phải làm bằng phần mềm). Thay vì "Right click trên file, chọn Merge... OK 2 lần", ta phải thực hiện phần mềm lúc phần mềm khởi động và lúc thoát phần mềm thì restore lại. Còn làm với 2 file reg như vậy thì chỉ nhanh hơn vào control panel, regional setting... 2 tý thôi. Hình như bạn ko để ý gì đến cách lập trình mà tớ đã giới thiệu ở mấy bài trên nhỉ?

Về vấn đề "Cá" và "Cần câu". Đó là phép ví von của tôi về việc hướng dẫn mọi người giải quyết vấn đề (tôi cũng hay đi "xin cá" nhưng đó là ở trường hợp tôi "câu" mãi mà "cá" ko "cắn").

Thông thường bao giờ tôi cũng "câu" trước khi xin "cá" (trừ khi có tiền "mua cá"). Nhưng kể cả lúc có tiền "mua cá" thì cũng ko sướng/hứng thú bằng việc sắm "cần" đi "câu" (các tỷ phú trên thế giới thường hay sắm tàu xịn để ra khơi câu cá nhằm hưởng thụ cuộc sống mà).
Gút lại vấn đề: Diển đàn này là CHIA SẼ, tranh luận là đễ tìm ra chân lý trong khoa học, nếu ai đó vì 1 lời nói mà tự ái bỏ diển đàn ra đi thì tôi nghĩ họ quá hẹp hòi rồi...

Ôi trời, mạng thì đã chậm mà...mất thời gian quá. Đành phải xin lỗi Mr Okebab vậy nhé. :(

AnhTuan1066 thử nghĩ 1 phút trước khi post bài xem. Thật đấy.
 
Lần chỉnh sửa cuối:
Thì đúng rồi... tôi nói trước đây là cách làm bằng tay mà... Còn nếu dùng Excel đễ Import và Export thì tôi thực sự ngu... Vì thế nên mới hỏi các cao thủ!
Còn nếu dùng một phần mềm nào đó đễ Import thì tôi nghĩ cách đơn giản nhất là trước tiên tôi có file .REG này, sau đó dùng lệnh đễ Import là gọn nhất... Để ý 1 vài phần mềm, tôi cũng thấy họ làm như vậy!
Mến
ANH TUẤN
 
Thầy Phước nè: Việc Import file .REG thì đơn giản rồi (vì mình đã có file trước)... nhưng làm sao Export 1 cách tự động? Tôi có ý kiến như vầy, cũng đơn giản thôi: Tạo 1 file Export.bat với nội dung:
regedit /e D:\Regional.txt "HKEY_CURRENT_USER\Control\Panel\International"

Khi chạy file này nó sẽ trích xuất key "International" trong Registry và lưu thành file Regional.txt nằm trong ổ D... Đường dẩn này Phước có thể sửa, và cả file Regional.txt nữa, Phước có thể sửa nó thành Regional.REG luôn cũng dc (nhưng tôi ghi .txt cho an toàn)

Nhiệm vụ của Phước là làm sao gọi dc file Export.bat trong Excel... Phước thử xem! Có gì hay cho biết với nhé! Vì món Excel này tôi thật sự ko rành!
Mến
ANH TUẤN
 
Lần chỉnh sửa cuối:
Cám ơn anh đã hướng dẫn. Để chạy File Export.bat (trong VBA) anh dùng lệnh này là được Shell Path &"\Export.bat" (Path là đường dẫn chứa file Export.bat)

Thân!
 
Mình đưa file Excel mẫu xuống cơ sở để họ lập danh sách, trong mẫu đó có cột ngày tháng năm sinh. Ở cơ sở thì họ nhập đúng định dạng dd/mm/yyyy rồi nhưng khi gửi lên máy của mình thì những trường hợp có ngày sinh <= 12 thì đều nhảy thành thành tháng hết. Ví dụ: ngày sinh của người A là 02/04/1998 thì nhảy thành 04/02/1998.
Các bạn cho mình cách giải quyết với nhé (mình lần đầu tiên làm excel đấy)
 
Gởi anh Tuấn
1/ Trước mắt anh thử dùng đoạn code này để cài "dd/MM/yyyy"
Mã:
Sub RegionalSettings()
    Shell ("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0")
    SendKeys "{Tab}"
    SendKeys "{Enter}"
    SendKeys "+{Tab}"
    SendKeys "{Right}{Right}{Right}{Right}{Tab}{Tab}"
    SendKeys "{d}{d}{/}{M}{M}{/}{y}{y}{y}{y}"
    SendKeys "{Enter}"
    SendKeys "{Tab}{Tab}{Enter}"
End Sub
Anh cho em hỏi copy đoạn code trên như thế nào để chạy được ạ?
Em cảm ơn anh
 
Chào các bạn!
Cả nhà ơi cho mình hỏi, file excel của mình đang dùng bình thường, tự nhiên sang ngày hôm sau mở lên code vba báo lỗi: Run-time error '13': Type mismatch. Nếu như thay đổi ngày trên máy tính sang những ngày về trước thi lại dùng mượt mà bình thường. Lỗi này sử lý như thế nào ạ, tks các bạn.
 
Chắc Code có 2ui định ngày Tận thế rồi & tìm ở đâu có dòng Code đó mà sửa lại.
 
Web KT
Back
Top Bottom