Chia sẻ ControlForOffice - Bộ công cụ điều khiển Office/Excel

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Gửi tặng các bạn bộ công cụ ControlForOffice.

MsgBox.jpg


MsgBoxW.jpg


MsgBoxTimer.jpg


MsgBoxTimerProgress.jpg


MsgBoxTimerProgressCallback.jpg


ChooseLan.jpg


Rename.jpg


CFO2.0.jpg


IPBTimer.jpg


IPBCallBFN.jpg



Download
. Phiên bản 2.0.4, cập nhật ngày 25/07/08.
 
Lần chỉnh sửa cuối:
Không ổn rồi TuanVNUNI ơi bạn hãy nhìn mấy hình này
 

File đính kèm

  • LoiHamChuyenSoThanhChu.JPG
    LoiHamChuyenSoThanhChu.JPG
    11.5 KB · Đọc: 114
  • LoiHamChuyenSoThanhChu1.JPG
    LoiHamChuyenSoThanhChu1.JPG
    34.5 KB · Đọc: 80
  • ChuyenDoiMa.jpg
    ChuyenDoiMa.jpg
    45.4 KB · Đọc: 81
Upvote 0
hoa35ktxd đã viết:
Vấn đề này nói khó đối với ai chưa biết, và không khó đối với ai đã biết rồi, ngoài việc dùng hàm API MessageBox ra thì tôi dùng Apploc.msi (1.32MB) do Microsoft cung cấp miễn phí nhằm khắc phục nhược điểm của VB, rất dễ sử dụng, cứ cài đặt bổ sung xong là có thể dùng luôn, hỗ trợ Vietnamese Locale CP 1528, dùng được cả trong VB6, không cần phải loay hoay với Unicode nữa, hỗ trợ rất nhiều control chuẩn của VBA và VB6 (Tôi chưa thử hết).

Kiến thức là không giới hạn. Còn rất nhiều người chưa biết, cũng có rất nhiều người đã biết, biết ở mức độ nào? Có nhiều cái ngày xưa tôi làm ra, tôi rất tự hào tưởng nó là đỉnh cao (với chính tôi), nhưng đến bây giờ nhìn lại mấy cái đó chỉ ở mức abc. Vấn đề quan trọng tôi đưa ra ở đây là, thành quả của mình cung cấp cho những người chưa biết và miễn phí.

Vậy, bạn cho tôi hỏi Apploc.msi có Timer không? Listview, Treeview, Grid có unicode không? Ngày xưa thì tôi không biết, bây giờ muốn download từ microsoft.com thì HĐH Windows của người dùng phải là bản "hợp pháp".

Quả thực nếu Apploc.msi unicode hết và hoàn thiện thì các PM của các công ty PM ở VN không phải làm cái trò giả lập unicode bằng cách chữa lại các font tahoma hay phải dùng VK Sans Serif của Vietkey...trừ khi PM đó chuyển dùng .Net.

Tuy nhiên bạn đừng bắt tôi phải chuyển các button của Msgbox thành tiếng việt nhé vì tôi không biết làm cái đó đâu ngoại trừ giả lập thôi (Nếu không lầm thì bạn cũng giả lập).

Đã mất thời gian nghiên cứu làm cái này thì giả lập làm gì, trừ khi mình không thể làm được. Tôi làm không giả lập chút nào! Người dùng có thể tự thay đổi theo ý mình, nếu muốn thì restore về ngôn ngữ chuẩn. Bạn xem kỹ hơn nhé!

Mã:
Sub TestRestoreButtonText()
Dim x As VbMsgBoxResult

'Can phai co neu chay SetButtonText mang tinh tam thoi
    
    SaveButtons 'Luu trang thai cua button

    SetButtonText ID_YES, "TiÕng &ViÖt"
    SetButtonText ID_NO, "&English"
    SetButtonText ID_CANCEL, "&Kh«ng lµm"
    
    x = MsgBox("B¹n muèn kh«i phôc nót bÊm vÒ d¹ng nµo?", _
                vbYesNoCancel + vbQuestion, _
                "Thay ®æi tªn nót button trong MsgBox")

    If x = vbYes Then
        RestoreButtonText False 'Viet Nam
    ElseIf x = vbNo Then
        RestoreButtonText True 'VB/VBA
    Else 'Cancel
        
        RestoreButtons 'Khoi phuc lai cac button
        
    End If
End Sub

Còn đối với cái file "ControlForOffice.xls" vẫn còn lỗi.
Lỗi ở đâu bạn nhỉ? Đó là file để test thôi mà.

Hàm chuyển số thành chữ không làm việc được, báo lỗi : #VALUE! khi người sử dụng thiết lập kiểu số theo dạng của Việt Nam (dấu thập phân là dấu "," dấu phân cách là dấu ".". Ngoài ra bạn cần có chế độ kiểm tra tính hợp lệ của dữ liệu của hàm USD, VND..., nếu đúng mới chạy, nếu không thì thoát. Ở đây nếu thiết lập theo chuẩn của VN thì khi sửa số liệu trong ô B19 lập tức lỗi và Excel sẽ thoát. Và bạn không nên để mặc định cho chương trình gán chữ "Đồng'' vào đằng sau kết quả. Hãy để việc đó cho người dùng vì có trường hợp đơn vị cần đếm không phải là đồng, Khi đó người sử dụng sẽ làm như sau (=''(Bằng chữ: '' & VND(B19) & ''Đồng''), như thế sẽ linh hoạt hơn.

Đúng vậy, cái này bạn nói đúng tôi sẽ sửa ngay. Thực sự hàm này tôi chưa check kỹ. Hàm này làm đúng có rất nhiều khâu phải kiểm tra:
- Kiểm tra mặc định trong Control Panel\Regional Options.
- Kiểm tra mặc định trong môi trường Excel.
- Kiểm tra loại giá trị của tham số đưa vào. Bình thường thì ai cũng đưa vào tiền là một con số, nhưng ai đó lại đưa vào giá trị là dạng Text/String là toi.

ControlForOffice tôi vẫn luôn sửa chữa và tăng ứng dụng trong nó. Vì vậy, version 1.2 chưa phải là phiên bản cuối cùng.

Rất cảm ơn bạn hoa35ktxd đã test và có ý kiến đóng góp ý xây dựng. Năm mới chúc bạn vui vẻ và thành công!
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn lời chúc của bạn.
Đầu xuân tôi chúc bạn mạnh khỏe, toại nguyện trong cuộc sống và tiếp tục có những đóng góp chung đáng kể vì sự tiến bộ chung của tất cả chúng ta.

Về vấn apploc.msi tôi đã nói là chưa thử hết tuy nhiên với listview, treeview, grid thì đều hỗ trợ UNC 1528, tất nhiên là không có timer vì đó là một control riêng. Còn về vấn đề Download thì free mà, tôi đang dùng win có bản quyền nên không biết thế nào, chưa đem cài cái này sang máy khác, tôi chỉ viết để tôi dùng thôi vì chỉ có tôi mới dùng được cái của tôi làm, người khác sờ vào chịu ngay. À, thằng này không hỗ trợ được 100% các control đâu và hơi phiền là nó chỉ hỗ trợ UNC 1528 tuy nhiên nó lại trị được một số thằng cứng đầu như frame, textbox, titlebar, menu, taskbar.
Nói vậy thôi, tùy mức độ và nhu cầu của người dùng để lựa chọn công cụ, tôi thì ngại viết lắm và nhất là dùng các control tự xây dựng, rất dễ bị xung đột.
Dù sao tôi cũng ủng hộ tâm huyết của bạn, chúng ta cùng tranh luận để có được những sản phẩm chất lượng cao phải không bạn.
 
Upvote 0
Cái này rất hay, nhưng không hiểu sao toàn bị lỗi thoát khỏi Excel.

Tuân có thể sửa lại không?
 
Upvote 0
ControlForOffice.ocx em đã dùng chính thức cho các ứng dụng của mình rồi. Chạy rất Ok!
Có lẽ trong file ví dụ có vấn đề gì đó? Em sẽ kiểm tra lại.

Anh và các bạn có thể download bản sửa đổi. Phiên bản đang nang cấp thành 1.3 - Ứng dụng CSDL. Vì chưa đưa các ví dụ vào nên em chưa chính thức công bố.
Phiên bản sửa đổi em cho thêm phần khôi phục giao diện unicode chuẩn của Windows mà một số ứng dụng nào đó đã chỉnh "sai".

DOWNLOAD


Lưu ý: Mọi người nên dùng hàm MsgBoxW thay cho hàm MsgBox.
Lý do, vì để MsgBox có giao diện tiếng Việt thì trước đó phải chạy hàm StartHookMsgBox và kết thúc phải dùng hàm StopHookMsgBox để đóng lại. Trong file ví dụ gửi kèm, tôi đã khai báo để cho chạy tự động khi mở file và đóng file trong module MD_Open_Close
Mã:
Sub Auto_Open()
   StartHookMsgBox GetHwndXLS(), strTCVN3 'Hook Msgbox - Cho phep hien thi MsgBox theo phong Unicode.

'Không nên chạy StartHookMsgBox trong thủ tục này.
  
End Sub

Sub Auto_Close()
   StopHookMsgBox 'Bỏ đi, nếu StartHookMsgBox không chạy.
End Sub
 
Upvote 0
Cái này hình như không thể hiện được tiếng Việt trong InputBox phải không Tuân ơi?
 
Upvote 0
Anh Tuân ơi, trong VBE có thể gõ theo Unicode mà ra vẫn là TV không anh ??

Em gõ theo VNI hoặc TCVN thì OK, nhưng Unicode lại chưa được.hay em làm sai ??
 
Upvote 0
Mr Okebab đã viết:
Anh Tuân ơi, trong VBE có thể gõ theo Unicode mà ra vẫn là TV không anh ??

Em gõ theo VNI hoặc TCVN thì OK, nhưng Unicode lại chưa được.hay em làm sai ??

Trong VBE không hiện được chuỗi Unicode, tất cả các dòng VB version<7 đều như thế cả. Nếu hiện được thì người ta có thể xây dựng một ứng dụng bằng VB hoàn toàn bằng Unicode một cách dễ dàng.
 
Upvote 0
TuanVNUNI đã viết:
Trong VBE không hiện được chuỗi Unicode, tất cả các dòng VB version<7 đều như thế cả. Nếu hiện được thì người ta có thể xây dựng một ứng dụng bằng VB hoàn toàn bằng Unicode một cách dễ dàng.

Ngay trên các diễn đàn ở VN cũng có đầy món viết Fully Unicode Support bằng VB đó thôi.

Ngoài ra còn có câu: Giờ chỉ sợ thiếu tiền, có tiền rồi mua quách bộ CyperActiveX gì đó (đỡ phải lằng nhằng viết lách cho mệt). Khi đó thì đúng là 200% Unicode Support luôn.
 
Upvote 0
smbsolutions đã viết:
Ngay trên các diễn đàn ở VN cũng có đầy món viết Fully Unicode Support bằng VB đó thôi.
Anh có thể cho địa chỉ để tham khảo không? Em nghĩ không đơn giản, cho dù thể hiện được Unicode trong VBE, khi lưu file, nó lại không lưu chuỗi Unicode.

smbsolutions đã viết:
Ngoài ra còn có câu: Giờ chỉ sợ thiếu tiền, có tiền rồi mua quách bộ CyperActiveX gì đó (đỡ phải lằng nhằng viết lách cho mệt). Khi đó thì đúng là 200% Unicode Support luôn.
Nếu mua thì chỉ dùng cho ứng dụng lớn, các ứng dụng nho nhỏ mà mua chắc lúc đó giá của ứng dụng tăng lên đáng kể vì chi phí tăng -->Khó cạnh tranh về giá.
 
Upvote 0
TuanVNUNI đã viết:
Anh có thể cho địa chỉ để tham khảo không? Em nghĩ không đơn giản, cho dù thể hiện được Unicode trong VBE, khi lưu file, nó lại không lưu chuỗi Unicode.
Tuân có vẻ ít tham khảo quá nhỉ. Bên Bảo minh hay trung tâm SDC gì đó trong Đà nẵng có cái HRM, cái SalesBX gì đó cũng là ứng dụng Unicode đó thôi. Ngay trên cái caulacbovb có cái vbapi lib gì đó cũng là unicode đó thôi, v.v...

Tôi ko thể tìm ví dụ được mặc dù chỉ mất vài phút để google. Hiện đang cong đít lên để mai đi làm cho khách hàng đây. Thứ tư họ khai trương rồi.

Cần gì PM lớn lao gì đâu, chỉ cần Tuân bán 2 cái A-Excel là đủ tiền mua cả bộ unicode control đó rồi. Nhiều khi cứ tưởng là đắt chứ thực ra là do ta ko quen mua sắm phần mềm mà thôi. Bên tớ hiện cũng mua 1 số thứ phục vụ cho "thượng đế" của mình rồi. Mua 1 lần mà thượng đế sài mãi chứ có phải đắt đỏ gì cho cam đâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Hi, tôi download rồi nhưng không biết làm sao để sử được cho soạn tiếng việt trrong VBA.
Xin chỉ giúp!
 
Upvote 0
xin lỗi tác giả, quả thật tôi đã download file, làm theo hướng dẫn như kô được bác có thể hướng dẫn cụ thể cho em, hoặc làm 1 file excel nhỏ, chỉ hướng dẫn hiển thị tiếng việt trên msgbox được kô? trong file có quá nhiều code, kô biết cái nào là của cái nào, xin chân thành cám ơn

ack, bó tay các bác. hướng dẫn cũng không đến nơi đến chốn, chỉ quăng cho con cá, đi kiếm cái cần câu đuối luôn.
Nếu bạn nào muốn hiển thị được msgbox tiếng việt unicode thì hãy làm như sau:
1.copy file controlforoffice.ocx vào windows\system32
2.copy lại toàn bộ đoạn mã module CFO_API vào file các bạn cần làm
3.Cái quan trọng tiếp theo là phải vào tool\reference chọn browse tìm đến file ControlForOffice.ocx
Làm xong 3 bước trên là thoải mái unicode msgboxW không cần phải khai báo starthookmsgbox nữa khi open và close file.
Nhưng không biết tại sao nhiều khi không hiện nội dung trong msgbox chỉ hiện mỗi cái button, bấm liên tục 7,8 lần thì lại hiện nội dung bình thường.Bó tay.com
Cám ơn TuanVNUNI đã cho ra tool hữu ích này.
 
Upvote 0
ControlForOffice v2.0, ngày 10/07/08

Xin giới thiệu tới các thành viên ControlForOffice v2.0, ngày 10/07/08.

CFO2.0.jpg


Những thêm mới và sửa đổi chính:

+ Thêm công cụ BSTaskPane: cho phép lập trình với Task Pane một cách dễ dàng. Người dùng lập trình trên UserForm sau đó nhúng vào Task Pane chỉ bằng 2 dòng lệnh! BSTaskPane lập trình được từ OfficeXP trở lên, với Office 2007 là tốt nhất.
Với Office 2007 cho phép hiển thị nhiều Task Pane cùng một lúc, còn với Office XP,2003 chỉ hiển thị được một.

+ Thêm InputBox: cho phép hiển thị InputBox với Unicode, nhập password, thay đổi màu chữ và nền.

+ Sửa font chữ trên MsgBoxW, chữ trên các nút lệnh thành chữ đậm (Bold)
+ Sửa sự ổn định tuyệt đối của MsgBoxW
+ Sửa các hàm đổi số thành chữ giống như với AccHelper.xll.
+ Sửa thanh Progress tương thích với Office 2007 (phiên bản cũ lỗi).
+ Sửa các hàm kết nối+truy vấn database.

Tác giả rất mong sự góp ý của các thành viên để bộ công cụ ControlForOffice ngày càng hoàn thiện.

Các bạn có thể download tại đường dẫn ở trang đầu.
 
Upvote 0
Sử dụng Form của VB6 với Task Pane

Xin giới thiệu với các bạn cách thức sử dụng Form của VB6 với Task Pane trong VBA.

TaskPaneWithVB6Form.jpg


Ví dụ kèm theo:
 

File đính kèm

  • TaskPaneVB6Form.zip
    29.7 KB · Đọc: 282
Upvote 0
Bác vui lòng sửa lại link download nhé. Bác để www.www như thế thì làm sao mọi người download đc.Thanks
và còn bị lỗi 2 nút đồng ý và không nó bị đen thui như thế này thì là sao hả bác???

loi3xc3.jpg


CÒn nữa, khi click vào Progress của thanh trạng thái thì báo lỗi run- time error 2147417848 automation error
Tôi đang use office 2003
 
Lần chỉnh sửa cuối:
Upvote 0
Bác vui lòng sửa lại link download nhé. Bác để www.www như thế thì làm sao mọi người download đc.Thanks
và còn bị lỗi 2 nút đồng ý và không nó bị đen thui như thế này thì là sao hả bác???

Cảm ơn bạn. Lỗi trên tôi đã sửa trong phiên bản 2.0.1.

ControlForOffice
v2.0.1, ngày 15/07/08

Sửa đổi phiên bản mới:
Sửa lỗi khi chạy hàm MsgBoxTimer, với cấu trúc MsgTimerStruct, nếu khai báo giá trị cho biến thành phần .DisableButton_IDs thì các hàm MsgBox sau sẽ bị ảnh hưởng của DisableButton_IDs (lỗi như bạn adult thông báo trên).

CÒn nữa, khi click vào Progress của thanh trạng thái thì báo lỗi run- time error 2147417848 automation error
Tôi đang use office 2003

Với các phiên bản Office 2000,2002 (XP),2003,2007 và WINDOWS XP thì tôi đã test không có lỗi nhưng với WINDOWS VISTA thì tôi chưa có điều kiện để test, bạn kiểm tra lại xem có lỗi đó không? Nếu vẫn bị thì có thể do ảnh hưởng của HĐH WINDOWS VISTA. Rất tiếc máy tôi không cài được Vista nên không debug được lỗi này.

Các bạn có thể download tại trang đầu.
 
Lần chỉnh sửa cuối:
Upvote 0
Các lỗi trên đã được khắc phục. Bác TuanVNUNI vui lòng cho mình hỏi, nếu muốn thay cái hình sử dụng login form của bác thì có cần phải chỉnh sửa gì trong file msg.skn không? Mình chỉ cần đổi hình là được đúng không?
Cám ơn sự đóng góp nhiệt tình của TUANVNUNI giành cho diễn đàn.
 
Upvote 0
ControlForOffice v2.0.2, ngày 18/07/08

Các lỗi trên đã được khắc phục. Bác TuanVNUNI vui lòng cho mình hỏi, nếu muốn thay cái hình sử dụng login form của bác thì có cần phải chỉnh sửa gì trong file msg.skn không? Mình chỉ cần đổi hình là được đúng không?
Cám ơn sự đóng góp nhiệt tình của TUANVNUNI giành cho diễn đàn.

Để tạo Skin cho form, bạn làmtheo hướng dẫn sau:
+ Tạo ảnh. Tô màu nền cho ảnh, chỉ tô một màu, bắt đầu từ toạ độ X=0, Y=0. Tô những vùng mà bạn muốn cắt bỏ
+ Dùng chương trình tạo file *.skn. Nội dung của file này thực chất chứa các điểm cần cần cắt bỏ khỏi form. Chương trình này download từ www.bluesofts.net
Lưu ý, số điểm cắt càng nhiều thì tốc độ tạo skin càng chậm, bạn cần có thêm thủ thuật để cắt nhanh (giới hạn điểm cắt).
+ Copy file *.skn vào cùng thư mục với file chương trình.
+ Tạo UserForm, trong màn hình "Property", chọn Picture và xác định file ảnh đã thiết kế
+ Trong sự kiện "UserForm_Initialize" của UserForm, soạn lệnh như sau:

Mã:
	Private Sub UserForm_Initialize()
	     SetWinSkin GetHwnd(Me.Caption), ActiveWorkbook.Path & "\file.skn"
	End Sub

ControlForOffice
v2.0.2, ngày 18/07/08

Thêm mới và sửa đổi trong phiên bản mới:
+ Thêm: Cho phép hiện màu nền (BackColor) và màu chữ (ForeColor) cho MsgBox(W).
+ Sửa : Căn lại vị trí và kích cỡ của các nút lệnh (command button) trên MsgBox(W) cho phù hợp hơn. Phiên bản cũ chiều cao của các nút lệnh lớn hơn 1 điểm, khoản cách từ thanh Progress đến nút lệnh quá gần.

MsgBoxCallBFN.jpg


+ Thêm : Hàm InputBox cho phép chạy Timer (cho phép đếm gian gian).
+ Thêm : Hàm InputBox cho phép triệu gọi một hàm khác bên ngoài trong khi chạy (Callback Function).
+ Thêm : Hàm InputBox cho phép vô hiệu (disable) một vài nút lệnh.

IPBTimer.jpg


IPBCallBFN.jpg


Với phiên bản mới này, một số các hàm sau đã được nâng cấp và sửa đổi cấu trúc
Mã:
[INDENT]StartHookMsgBox
MsgBoxW
MsgBoxTimer
CallbackTimerProc 

Type TInputStruct[/INDENT]

Các bạn có thể download tại trang đầu.
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT
Back
Top Bottom