Nhờ giúp lỗi 'Method PasteFace of object _CommandBarButton failed'.

Liên hệ QC

chipvang

Thành viên mới
Tham gia
29/11/08
Bài viết
37
Được thích
11
Tôi dùng phương thức Pasteface để thêm custom icon vào commandbutton.
Chương trình chạy tốt nhưng khi chạy một số chương trình có can thiệp tới bộ nhớ (clipboard) thì báo lỗi 'Method PasteFace of object _CommandBarButton failed'. Có ai biết giúp gỡ hộ lỗi này.

P/s: Tôi chạy ứng dụng bình thường nhưng khi chạy teamviewer để show cho người khác xem thì thấy phát sinh lỗi trên.

Mã:
...

    Set mybutton= Application.Commandbars(1).Controls.Add(Type:=msoControlButton)

    With mybutton

        .BeginGroup = BeginGroup
        .Caption = "Help me"
        .OnAction = "OnButtonClick"
                
        UserForm1.Picture1 = UserForm1.ImageList1.ListImages("Help").Picture
        Clipboard.SetData UserForm1.Picture1.Image, 2
        .PasteFace
             
    End With

...

Trong đó có cái Userform chứa cái Immage và picture để lưu và load Icon mình muốn

Lưu ý là code chạy tốt nhưng khi chạy Teamviewer thì mới báo lỗi, chắc là nó xóa bộ nhớ đệm nên phương thức Clipboard.SetData bị sai kiểu dữ liệu nên khi pasteface báo lỗi. Tôi đoán vậy nhưng chưa biết làm thế nào để tránh lỗi này.

xin các bác chỉ giúp

Thanks
 
Lần chỉnh sửa cuối:
HI

Chờ mãi không thấy bác nào trả lời, tôi lọ mọ và đã có giải pháp tạm thời là thêm vào một lệnh if kiểm tra kiểu dữ liệu trong clipboard, nếu là Image thì mới Pasteface thì hết lỗi, tuy nhiên cái nút đó sẽ không có icon.

Mã:
            If Clipboard.GetFormat(ClipBoardConstants.vbCFBitmap) Then
                .PasteFace
            End If

Nếu muốn chắc chắn thì cho thêm vòng lặp chừng nào kiểu dữ liệu đúng thì mới thôi (có thể làm chậm chương trình)

Các bác có cao kiến nào khác không? tôi thấy giải pháp này vẫn chưa ổn lắm

Thanks
 
Upvote 0
Bạn lấy vào clipboard làm chi rồi lại phải paste trở ra.
Nếu như bạn thấy rằng máy có thể hiểu pic trong listImg rồi thì ta gắn thẳng cái đó vào button luôn.
Gán vào button hay gán vào clipboard thì cũng 1 công, đỡ công paste ra.

PHP:
....
Dim picPic as IPictureDisp
...
With mybutton
....
    set picPic = UserForm1.ImageList1.ListImages("Help").Picture
    .picture = picPic
....
End With
 
Upvote 0
Bạn lấy vào clipboard làm chi rồi lại phải paste trở ra.
Nếu như bạn thấy rằng máy có thể hiểu pic trong listImg rồi thì ta gắn thẳng cái đó vào button luôn.
Gán vào button hay gán vào clipboard thì cũng 1 công, đỡ công paste ra.

PHP:
....
Dim picPic as IPictureDisp
...
With mybutton
....
    set picPic = UserForm1.ImageList1.ListImages("Help").Picture
    .picture = picPic
....
End With

Cám ơn muontennguoikhac . Đây là một ý rất hay, tôi đã từng thử trước đó rồi, nhưng không hiểu sao khi gán thuộc tính picture cho nút nó lại báo lỗi. (Viết trong mỗi trường VB6).

Lỗi báo thế này "Automation error Catastrophic failure"

Nhưng dùng PasteFace thì lại OK, không hiểu sao nữa.


gold.gif
 
Upvote 0
Bạn viết trong VB?
Tưởng bạn viết trong VBA chứ. Đây là box "Lập trình với Excel" mà ???
 
Upvote 0
Code thi trong VB, nhưng toan bộ ứng dụng chạy trên Excel, đây là kỹ thuật mà bác TuanVNUni chỉ đó. Lập trình Trên Excel thông qua dll.

Mình không lộn box đâu, mà VBA với VB đến 90% tương đồng mà, chỉ có một chút khác biệt thôi.

Nhờ các bác giúp thêm về thuôc tính .Picture nhé
 
Upvote 0
Cám ơn muontennguoikhac . Đây là một ý rất hay, tôi đã từng thử trước đó rồi, nhưng không hiểu sao khi gán thuộc tính picture cho nút nó lại báo lỗi. (Viết trong mỗi trường VB6).

Lỗi báo thế này "Automation error Catastrophic failure"

Nhưng dùng PasteFace thì lại OK, không hiểu sao nữa.


gold.gif


Cái ListImages là trong bộ MSCOMCTRL.OCX, cái này hiện nay đang lỗi với một số máy do Windows nâng cấp. Không nên gán Set ExcelObj.Picture = ListImages(Index).Picture vì hai kiểu này có thể không thực sự cùng kiểu.

Kiểu tra nếu Clipboard.SetData(...) = True thì Paste là ok rồi nhưng không nên dùng vòng lặp đến khi nào thành công vào việc này.

Để kiểm tra có phải clibboard là Empty khi chạy TV không, mình thử copy ảnh từ đâu đó rồi vào Word hoặc Excel nhấn CTRL+V xem có tác dụng không? Nếu không được thì có thể do TV sử dụng clipboard rồi. Nếu như vậy thì đành chịu **~**.
 
Upvote 0
Cái ListImages là trong bộ MSCOMCTRL.OCX, cái này hiện nay đang lỗi với một số máy do Windows nâng cấp. Không nên gán Set ExcelObj.Picture = ListImages(Index).Picture vì hai kiểu này có thể không thực sự cùng kiểu.

Kiểu tra nếu Clipboard.SetData(...) = True thì Paste là ok rồi nhưng không nên dùng vòng lặp đến khi nào thành công vào việc này.

Để kiểm tra có phải clibboard là Empty khi chạy TV không, mình thử copy ảnh từ đâu đó rồi vào Word hoặc Excel nhấn CTRL+V xem có tác dụng không? Nếu không được thì có thể do TV sử dụng clipboard rồi. Nếu như vậy thì đành chịu **~**.

Thế mà Chipvang lại nói là : đã từng chạy tốt, chỉ khi chạy TeamViewer mới bị lỗi.
Như vậy cũng khó nói là do MSCOMCTRL.OCX.
Khó hiểu thật.
Bạn up file lên đây cho máy khác chạy thử xem sao.
 
Upvote 0
Thế mà Chipvang lại nói là : đã từng chạy tốt, chỉ khi chạy TeamViewer mới bị lỗi.
Như vậy cũng khó nói là do MSCOMCTRL.OCX.
Khó hiểu thật.
Bạn up file lên đây cho máy khác chạy thử xem sao.

Bạn đọc kỹ bài của Chip nhé. MSCOMCTRL.OCX lỗi là không chạy được. Bạn search trên Google để nghe thiên hạ nói về cái này nhé.

Chuyện TeamViewer đang nghi là xóa clipboard trong quá trình chạy.
 
Upvote 0
Bạn đọc kỹ bài của Chip nhé. MSCOMCTRL.OCX lỗi là không chạy được. Bạn search trên Google để nghe thiên hạ nói về cái này nhé.

Chuyện TeamViewer đang nghi là xóa clipboard trong quá trình chạy.

Cám ơn bạn đã nhắc nhở.
Tôi đã lên gặp ông Gu gồ. Ổng hỏi ai kêu lên , tôi bảo là bạn giới thiệu nên cũng được tiếp đãi nồng hậu. Khi về còn có quà.
Và ổng có gởi lời nhắn đến bạn, xin trân trọng kính chuyển:

"NGHỊ HÁCH la to quá!
Biết "Automation error Catastrophic failure" là cái con gì không? Về đọc lại cho kỹ tự điển tiếng Anh nhé.
Cứ hễ "Automation error Catastrophic failure" là lỗi MSCOMCTRL.OCX sao?"

(Cái đó hổng phải tui nói đâu nha, đừng quánh tui tội nghiệp)

Code thi trong VB, nhưng toan bộ ứng dụng chạy trên Excel, đây là kỹ thuật mà bác TuanVNUni chỉ đó. Lập trình Trên Excel thông qua dll.

Mình không lộn box đâu, mà VBA với VB đến 90% tương đồng mà, chỉ có một chút khác biệt thôi.

Nhờ các bác giúp thêm về thuôc tính .Picture nhé

Về cái .Picture của CommandButton thì hồi nào tới giờ tôi gắn hình nào là được hình đó, chưa gặp lỗi bao giờ nên thật ra kinh nghiệm cũng chưa nhiều.
Học thất bại của người khác để làm kinh nghiệm của mình thì tiến nhanh hơn là học thành công của người khác, phải không?
Ở đây chính là tôi học từ bạn nhiều hơn là bạn học từ tôi.


Theo tôi nếu không bắt buộc thì bạn không nên dùng clipboard. Bởi vì nó thuộc quyền quản lý của hệ điều hành. Nội dung và format của nó bị chi phối bởi hệ điều hành và vào bất cứ lúc nào nó cũng có thể chứa những thứ khác phục vụ cho các phần mềm khác chạy song song trong hệ chứ không phải cho chương trình của bạn.
Ngoài ra, trước khi đổ lỗi cho máy thì bạn cũng phải kiểm tra lại xem câu lệnh của mình có đúng không.
Có thể là chính bạn đã viết code sai làm máy không hiểu nên sinh chuyện. Trình độ của mình thì cũng dám lắm chứ.

Về .PasteFace của CommandButton:
Theo kiến thức của tôi thì method này copy bề mặt của 1 button hệ thống khác (built-in button) đưa vào user button đang xử lý.
Như vậy nó sẽ copy nhiều thứ: caption, pic, ... tức là những thuộc tính của 1 button.
Mà .PasteFace này là 1 method của CommandButton do đó nó chỉ paste ra những cái nằm trong clipboard của commandbutton (không phải clipboard của Windows nhé).
Như vậy trước khi .PasteFace bạn phải .CopyFace, và dĩ nhiên chỉ có thể copy face của 1 build-in button, không thể .copyface hay .pasteface của cái gì khác (hình, chữ... đều không được).
Đơn giản và dễ nhớ: không dưng nó lại có thêm chữ FACE ở sau copy, patse.

Về yêu cầu của bạn: .picture của CommandButton:
Có thể gán từ ListImages hoặc là đọc trực tiếp từ dĩa rồi gán vào.
Làm trong ListImage thì có cái lợi là : khi thiết kế bạn đã đưa sẵn hình vào rồi nên khi gọi ra dùng sẽ nhanh, nhưng tất nhiên khi khởi động thì sẽ chậm vì phải chờ ListImages tải hình vào đủ đã.
Bạn cũng còn cách khác là dùng stdOLE để tải hình từ máy lên khi run-time.
PHP:
....
   Set picPicture = stdole.StdFunctions.LoadPicture( tên_file_ảnh_và_đường_dẫn)
    .Picture = picPicture
Hiển nhiên còn cách thứ 3 là .CopyFace từ các build-in button. Một số build-in button có hình, 1 số khác thì không. Sau khi .PasteFace bạn gán lại tất cả caption, action... chỉ chừa lại cái hình. Nhưng như vậy không được như ý vì không có hình riêng của mình.
Mà cả ListImages lẫn stdOLE đều thuộc bộ thư viện Common Control nên nếu bị lỗi thì ....
Trình độ tui chỉ có bấy nhiu thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi đọc 2 bài trên tôi đã quyết định thử lại nguyên nhân có phải do teamview hay không thì thấy rằng đúng như vậy.

Tôi đồng ý với TuanVNuni về cái vụ không tương thích của cái common control trên một số máy. Trong trường hợp này là máy mình đang chạy tốt nên chắc không phải nguyên nhân này.

Còn việc loadpicture lúc runtime cũng chậm và bất tiện. Mình đã thử đi sâu vào cái lỗi nó thông báo khi gán thuộc tính picture của commandbutton nhưng chưa tìm được thuốc.

Tạm thời vẫn dùng Pasteface tạm đã, chờ tìm giải pháp sau vậy.

P/s: Dùng copyface và pasteface của mấy cái buitin thì không thể hiện được cái riêng của mình, vốn dĩ của icon là gợi nhớ và biểu trưng mà :D

Thanks,
 
Upvote 0
Cám ơn bạn đã nhắc nhở.
Tôi đã lên gặp ông Gu gồ. Ổng hỏi ai kêu lên , tôi bảo là bạn giới thiệu nên cũng được tiếp đãi nồng hậu. Khi về còn có quà.
Và ổng có gởi lời nhắn đến bạn, xin trân trọng kính chuyển:

"NGHỊ HÁCH la to quá!
Biết "Automation error Catastrophic failure" là cái con gì không? Về đọc lại cho kỹ tự điển tiếng Anh nhé.
Cứ hễ "Automation error Catastrophic failure" là lỗi MSCOMCTRL.OCX sao?"

(Cái đó hổng phải tui nói đâu nha, đừng quánh tui tội nghiệp)

Tôi tưởng bạn đọc rồi hiểu cái gì đó từ bộ controls MSCOMCTL.OCX hóa ra không thu lượm được gì. Tôi đã nhiều năm làm việc với controls và cũng đã tạo ra bộ ActiveX Controls BSAC gần như thay thế toàn bộ controls trong MSCOMCTL không có unicode và nhiều yếu điểm.
ActiveX Controls BSAC:
http://www.giaiphapexcel.com/forum/showthread.php?t=27777

Trong quá trình làm việc với ActiveX Controls, cái thông báo lỗi "Automation error Catastrophic failure" tôi luôn gặp và phải xử lý cho chính BSAC của mình nên bạn đừng khuyên tôi là "Về đọc lại cho kỹ tự điển tiếng Anh nhé".

To Chipvang:
Lỗi "Automation error Catastrophic failure" thường xảy ra do không tương thích của controls giữa phiên bản cũ và mới. Ví dụ bạn thêm ListImages vào Form từ phiên bản MSCOMCTL version 6.01.9786 và lưu lại (được lưu trong Resource của Form). Khi bạn mở Form này trên một máy khác, tại máy đó đã có MSCOMCTL version 6.1.1234 (phiên bản mới hơn) giữa hai phiên bản này có sự khác nhau về Interface (Properties, Methods, Functions, Data Type), như vậy máy sẽ báo lỗi "Automation error Catastrophic failure" do những khai báo trong Form được lưu trong Resource của nó không tương thích với Interface của control trong máy tính.

Microsoft đã có MSCOMCTL.OCX phiển bản mới (khi Windows Vista ra đời) và không còn tương thích với MSCOMCTL.OCX (thời của Windows XP). Các phần mềm đang sử dụng MSCOMCTL.OCX có thể gặp nguy cơ không tương thích controls của MSCOMCTL.OCX giữa các máy, nếu các máy đó update controls từ server của Microsoft.

Về .PasteFace của CommandButton:
Theo kiến thức của tôi thì method này copy bề mặt của 1 button hệ thống khác (built-in button) đưa vào user button đang xử lý.
Như vậy nó sẽ copy nhiều thứ: caption, pic, ... tức là những thuộc tính của 1 button.
Mà .PasteFace này là 1 method của CommandButton do đó nó chỉ paste ra những cái nằm trong clipboard của commandbutton (không phải clipboard của Windows nhé).
Như vậy trước khi .PasteFace bạn phải .CopyFace, và dĩ nhiên chỉ có thể copy face của 1 build-in button, không thể .copyface hay .pasteface của cái gì khác (hình, chữ... đều không được).
Đơn giản và dễ nhớ: không dưng nó lại có thêm chữ FACE ở sau copy, patse.

Các giải thích của bạn chỗ này sai hết cả. Bạn đọc lại help của Excel hoặc lại vào Google một lần nữa và đọc kỹ hơn nhé.

Vì trình độ VB6/VBA của Chipvang thừa hiểu cách sử dụng các methods CopyFace, Pasteface nên tôi không giải thích lại, chỉ nói thêm là lỗi "Method PasteFace of object _CommandBarButton failed" là do Clipboard bị xóa rống trước khi PasteFace được thực hiện là chắc chắn. Liệu có phải là TeamViewer làm hay không thì Chipvang làm vài thí nghiệm sẽ có kết luận ngay.
 
Upvote 0
Tôi tưởng bạn đọc rồi hiểu cái gì đó từ bộ controls MSCOMCTL.OCX hóa ra không thu lượm được gì. Tôi đã nhiều năm làm việc với controls và cũng đã tạo ra bộ ActiveX Controls BSAC gần như thay thế toàn bộ controls trong MSCOMCTL không có unicode và nhiều yếu điểm.
ActiveX Controls BSAC:
http://www.giaiphapexcel.com/forum/showthread.php?t=27777

Trong quá trình làm việc với ActiveX Controls, cái thông báo lỗi "Automation error Catastrophic failure" tôi luôn gặp và phải xử lý cho chính BSAC của mình nên bạn đừng khuyên tôi là "Về đọc lại cho kỹ tự điển tiếng Anh nhé".

W o o o o o o a h!
TuanVNUNI giỏi thật. Khâm phục. Khâm phục.
Còn cái câu kia tui nói trước là không phải tui nói rồi mà??? :=\+
Ông Gu gồ này thật lạc hậu, đáng đánh đòn. Người ta giỏi thì người ta có quyền nói lớn tiếng chứ.



Các giải thích của bạn chỗ này sai hết cả. Bạn đọc lại help của Excel hoặc lại vào Google một lần nữa và đọc kỹ hơn nhé.
Tôi xác nhận là tôi không có kinh nghiệm xử lý lỗi. Một lần nữa xác nhận lại điều này.
Tìm hiểu cái lỗi mà Chipvang gặp là để cho tôi học hỏi thêm.


Vì trình độ VB6/VBA của Chipvang thừa hiểu cách sử dụng các methods CopyFace, Pasteface nên tôi không giải thích lại, chỉ nói thêm là lỗi "Method PasteFace of object _CommandBarButton failed" là do Clipboard bị xóa rống trước khi PasteFace được thực hiện là chắc chắn. Liệu có phải là TeamViewer làm hay không thì Chipvang làm vài thí nghiệm sẽ có kết luận ngay.

Hôm qua tôi có nói: Khó hiểu thật.
Hôm nay xin đính chính lại: QUÁ KHÓ HIỂU, QUÁ QUÁ QUÁ KHÓ HIỂU.

Vậy rốt lại là lỗi "Method PasteFace of object _CommandBarButton failed" hay lỗi "Automation error Catastrophic failure" là lỗi của ListImages hay chỉ là lỗi của MSCOMCTL.OXC ???
 
Upvote 0
Sau khi đọc 2 bài trên tôi đã quyết định thử lại nguyên nhân có phải do teamview hay không thì thấy rằng đúng như vậy.

Tôi đồng ý với TuanVNuni về cái vụ không tương thích của cái common control trên một số máy. Trong trường hợp này là máy mình đang chạy tốt nên chắc không phải nguyên nhân này.

Còn việc loadpicture lúc runtime cũng chậm và bất tiện. Mình đã thử đi sâu vào cái lỗi nó thông báo khi gán thuộc tính picture của commandbutton nhưng chưa tìm được thuốc.

Tạm thời vẫn dùng Pasteface tạm đã, chờ tìm giải pháp sau vậy.

P/s: Dùng copyface và pasteface của mấy cái buitin thì không thể hiện được cái riêng của mình, vốn dĩ của icon là gợi nhớ và biểu trưng mà :D

Thanks,


Tôi thì thấy ngược lại.
Thường thì ta đặt vào ListImages rất nhiều hình (để dành xài dần cho nhiều trường hợp).
Còn nếu load từ dĩa thì chỉ load những hình cần dùng thôi. Mà hình của button thì chỉ cần chọn hình nho nhỏ, cỡ 20x20 pixcel nên load cũng nhanh.
Mà ListImages thì cũng phải nạp vào khi khởi động. Chứ ở đâu ra cái hình?

Nhưng phần bất tiện thì đúng là có.File trên dĩa phải đặt đúng đường dẫn. Lâu ngày lại quên dời đi chỗ khác thì đúng là phiền. Trong khi đã nạp vàp ListImages rồi thì chẳng sợ mất.

Chỉ có điều máy tôi thì gán từ ListImages hay load từ đĩa đều chạy vô tư.
Mà như thế thành ra ngu luôn. //**///**/
 
Upvote 0
- Đưa cái hình lên button thì giờ mới nghe lần đầu là sử dụng bằng Clipboard. CopyFace, PasteFace ... chưa nghe thấy bao giờ và chưa thấy 1 VB6 coder nào trên PSC dùng tới (vì tôi theo dõi ko bỏ 1 ngày nào source code trên PSC kể từ năm 1998 tới nay)
- Dùng ImageList như muontennguoikhac đã nói
- Dùng Resource file

Trước khi làm 1 vấn đề gì đó khi lập trình thì tôi thường nghĩ tới nhiều cách thực hiện từ cơ bản tới nâng cao, từ dễ nhất tới khó làm nhất. Sau đó tìm hiểu trên Internet hoặc nghĩ phương pháp làm cho từng cách đó và trong lúc đó tìm cách tối ưu nhất (tốt nhất hoặc thực hiện nhanh nhất tùy theo yêu cầu, tài nguyên cho phép). Đặc biệt khi gặp 1 vấn đề trục trặc, khó giải quyết thì tôi thường tìm "a round solution" chứ hạn chế việc tiếp tục tìm cho bằng ra, khắc phục cho bằng được vấn đề khó đó. Với phương châm đó thì tôi nhận thấy việc giải quyết vấn đề hiệu quả hơn nhiều.

Còn việc loadpicture lúc runtime cũng chậm và bất tiện. Mình đã thử đi sâu vào cái lỗi nó thông báo khi gán thuộc tính picture của commandbutton nhưng chưa tìm được thuốc.
Các ứng dụng chả ai để icons ở ngoài thư mục và khi dùng tới đâu thì lại load tới đó. Thế giả sử em khách hàng xinh tươi nào lỡ tay xóa hay move thư mục icons đó đi đâu thì nhìn vào phần mềm thấy trắng phớ à?

Lỗi nhiều khi là do số màu của icons nữa bạn ơi. Bạn phải dùng 1 icons editor xem trong icon files đó có bao nhiêu icons với bao nhiêu loại size và màu. Không phải 1 file icon chỉ có duy nhất 1 icon với size, màu như mình nhìn bằng mắt thường đâu :). Đó chính là lý do tại sao khi ta Set ...Picture = LoadPicture(...) thì nó báo lỗi.

TuanVNUNI đã viết:
Các phần mềm đang sử dụng MSCOMCTL.OCX có thể gặp nguy cơ không tương thích controls của MSCOMCTL.OCX giữa các máy, nếu các máy đó update controls từ server của Microsoft.

Thế bộ cài đặt để làm gì hả Tuân ơi?

Hiện nay a cài latest cumulative update của VB6 và khi deliver tới KH thì chả bao giờ thấy trục chặc gì với cái MSCOMCTRL.OCX cả.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bác hai2hai,

Tôi đã một lần nữa xem lại các vấn đề bác nói nhưng những nghi ngờ về mầu Icon hoặc ICon nhiều lớp là không phải.

Hiện nay tôi đang code trong môi trường VB6, chỉ có một ít code trong VBA thôi. Lệnh .picture trong VBA chạy tốt nhưng trong VB6 thì không chạy được, Báo lỗi thì có vẻ không tương thích nhưng đã thử nhiều version của common control nhưng không giải quyết được

-> về ground solution cũng đã tìm hiểu nhưng chưa có cách nào khả dĩ. Thực ra lưu ảnh trong Resoure hay imagelist thì cũng là hình thức lưu rồi đọc ra thôi (để kông phải lưu ở ngoài người dùng xóa mất).

Vấn đề là cái chuẩn IPictureDisp có vấn đề gì không giữa VBA và VB6 thôi. Tôi vẫn phải dùng cách Copyface và PasteFace bác ạ.

Có cách nào tốt hơn nhờ cả nhà giúp nhé

Thanks
 
Upvote 0

Cho tôi hỏi lại, cái interface này là 1 thư viện của commandbar trong excel à? (sorry, về Excel thì tôi lại là newbie rồi)

Bạn thử tìm hiểu thêm từ link này xem sao: http://support.microsoft.com/kb/286460

Additional Notes

As previously stated, the IPictureDisp interface cannot be marshalled across process boundaries. Attempts to set the Picture and Mask properties out-of-process result in the following error:
Run-time error '-2147418113(8000ffff)':
Method 'Picture' of object '_CommandBarButton' failed
Therefore, you cannot set these properties for a CommandBarButton from any out-of-process Automation client or from an in-process component that is running in debug mode in the Visual Basic IDE. If you run the sample Add-in described in this article from the Visual Basic IDE, you will receive this error. To avoid the error while debugging, you can comment the lines that set the Picture and Mask properties or use conditional compilation, such as an #If...Then...#Else directive.

Như vậy, solution cho bạn là sử dụng "dịch theo điều kiện" (có # ở đầu), không biết bạn có quen vấn đề này ko?

P/S: Mình quên mất là các bạn đang làm trong VBA. Mình viết trên VB6 nên ko dùng tới mấy thứ này làm gì. Cố gắng độc lập với mọi môi trường Office

Tham khảo thêm Mr Google
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy là có vẻ khả dĩ, nghĩa là có thể do trong môi trường Debug chết, vậy là phải dịch có điều kiện?

Vấn đề là tôi không hiểu dịch có điều kiện có dấu "#" ở đầu là như thế nào, nhờ bác hai2hai giúp hộ khái niệm này

thanks
 
Upvote 0
- Đưa cái hình lên button thì giờ mới nghe lần đầu là sử dụng bằng Clipboard. CopyFace, PasteFace ... chưa nghe thấy bao giờ và chưa thấy 1 VB6 coder nào trên PSC dùng tới (vì tôi theo dõi ko bỏ 1 ngày nào source code trên PSC kể từ năm 1998 tới nay)
- Dùng ImageList như muontennguoikhac đã nói
- Dùng Resource file

Do anh không làm việc với Commadbar của MS Office nên không rõ về vấn đề làm ảnh trên CommandButton. CopyFace, PasteFace là hai thủ tục duy nhất có thể đưa ảnh bên ngoài vào button trên Toolbar. Bản chất làm việc của chúng là sử dụng Clipboard.

...

Thế bộ cài đặt để làm gì hả Tuân ơi?

Hiện nay a cài latest cumulative update của VB6 và khi deliver tới KH thì chả bao giờ thấy trục chặc gì với cái MSCOMCTRL.OCX cả.

Nếu anh đang dùng MSCOMCTRL.OCX phiên bản cũ, đã đưa các controls vào Form rồi. Nếu update phiên bản mới từ Microsoft là anh phải xóa tòa bộ controls liên quan và add lại vào Form. Em đã gặp phải vấn đề này rồi.

Đây là một ví dụ
http://www.giaiphapexcel.com/forum/showthread.php?t=16802&page=4


Có nghĩa là làm bộ cài đặt dù cao thủ cũng không làm được.
 
Upvote 0
Nếu anh đang dùng MSCOMCTRL.OCX phiên bản cũ, đã đưa các controls vào Form rồi. Nếu update phiên bản mới từ Microsoft là anh phải xóa tòa bộ controls liên quan và add lại vào Form. Em đã gặp phải vấn đề này rồi.

Đây là một ví dụ
http://www.giaiphapexcel.com/forum/showthread.php?t=16802&page=4


Có nghĩa là làm bộ cài đặt dù cao thủ cũng không làm được.

Tại sao anh lại dùng MSCOMCTRL.OCX phiên bản cũ? Và tại sao anh add control lại vào form làm gì hả Tuân? Mình làm bộ cài đặt và deliver SP tới KH cơ mà. Tại sao mọi người ko làm như vậy.

Có 46,000 người download PM bên anh rồi ko ai bị lỗi về MSCOMCTRL.OCX. Khi gặp vesion cũ trên máy của KH thì lập tức nó update luôn và khi đó PM của mình chạy ngon nghẻ. Làm sao mà bị lỗi?

Anh có nói là anh dùng phiên bản cũ đâu? Anh nói là anh dùng phiên bản mới nhất của MS, sau đó khi cài lên máy KH thì nó sẽ cài đúng y chang môi trường của máy mình lên máy của người khác và chương trình của mình sẽ chạy đúng. Vậy tại sao ko làm bộ cài đặt như thế đi?

Có lẽ anh hiểu là ý Tuân là đang dùng phiên bản cũ của OCX, sau đó cài OCX mới lên thì các forms của Tuân bị chết?

VB Project của anh làm từ 2003, anh thay mấy đời VB6 update lên rồi mà form phiệc có sao đâu nhỉ? Anh install cho bao nhiêu nơi rồi cũng có gặp vấn đề gì đâu?

Có lẽ mọi người dính với VBA nhiều quá nên cái gì cũng design time problems. Làm VB6 trơn thì hầu như ko gặp trục trặc gì về lập trình mấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom