Hỏi về cách gọi một macro trong excel từ code vb6 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

luongtuananh83

Thành viên mới
Tham gia
27/12/07
Bài viết
19
Được thích
0
Tôi muốn từ vb6 gọi một macro excel để tính toán và xuất dữ liệu ra ngay trong excel. Xin hỏi phải làm thế nào? Xin các bạn hướng dẫn chi tiết, Thanks nhiều!
 
Tôi muốn từ vb6 gọi một macro excel để tính toán và xuất dữ liệu ra ngay trong excel. Xin hỏi phải làm thế nào? Xin các bạn hướng dẫn chi tiết, Thanks nhiều!
Bạn có thể tham khảo từ đây:
http://support.microsoft.com/kb/194611

Mã:
Private Sub Command1_Click()
       ' Start Excel
       Dim xlapp As Object 'Excel.Application
       Set xlapp = CreateObject("Excel.Application")

       ' Make it visible...
       xlapp.Visible = True

       ' Add a new workbook
       Dim xlbook As Object 'Excel.Workbook
       Set xlbook = xlapp.Workbooks.Add

       ' Add a module
       Dim xlmodule As Object 'VBComponent
       Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule

       ' Add a macro to the module...
       Dim strCode As String
       strCode = _
          "sub MyMacro()" & vbCr & _
          "   msgbox ""Inside generated macro!!!"" " & vbCr & _
          "end sub"
       xlmodule.CodeModule.AddFromString strCode


       ' Run the new macro!
       xlapp.Run "MyMacro"

       ' ** Create a new toolbar with a button to fire macro...
       ' Add a new toolbar...
       Dim cbs As Object 'CommandBars
       Dim cb As Object 'CommandBar
       Set cbs = xlapp.CommandBars
       Set cb = cbs.Add("MyCommandBar", 1, , True) '1=msoBarTop
       cb.Visible = True

       ' Make it visible & add a button...
       Dim cbc As Object 'CommandBarControl
       Set cbc = cb.Controls.Add(1) '1=msoControlButton

       ' Assign our button to our macro
       cbc.OnAction = "MyMacro"

       ' Set text...
       cbc.Caption = "Call MyMacro()"

       ' Set Face image...
       ' 51 = white hand
       ' 25 = glasses
       ' 34 = ink dipper
       ' etc...
       cbc.FaceId = 51

       ' Pause so you can inspect results...
       MsgBox "All done, click me to continue...", vbMsgBoxSetForeground

       ' Remember to release module
       Set xlmodule = Nothing

       ' Clean up
       xlbook.Saved = True
       xlapp.Quit
      End Sub

Lê Văn Duyệt
 
Upvote 0
Khi tôi chạy đoạn code trên thì ct báo lỗi: programmatic access to "Visual basic project is not trusted" tại dòng:
' Add a module
Dim xlmodule As Object 'VBComponent
=> Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule
Xin anh Duyệt giúp cho sửa thế nào? cảm ơn anh nhiều.
ps: tôi là dân amateur nên nhiều vđề còn ko rõ, anh thông cảm
 
Lần chỉnh sửa cuối:
Upvote 0
Cho phép truy xuất VBA

Khi tôi chạy đoạn code trên thì ct báo lỗi: programmatic access to "Visual basic project is not trusted" tại dòng:
' Add a module
Dim xlmodule As Object 'VBComponent
=> Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule
Xin anh Duyệt giúp cho sửa thế nào? cảm ơn anh nhiều.
ps: tôi là dân amateur nên nhiều vđề còn ko rõ, anh thông cảm


Trước khi chạy macro, cần thiết lập thông số cho phép truy xuất các thành phần của VBA.
Từ menu:

[Tools]\Macro\Security\Trusted Publishers

đánh dấu vào nút [x] Trust access to Visual Basic Project
 
Upvote 0
Tôi muốn từ vb6 gọi một macro excel để tính toán và xuất dữ liệu ra ngay trong excel. Xin hỏi phải làm thế nào? Xin các bạn hướng dẫn chi tiết, Thanks nhiều!
Mình đã email cho bạn rồi mà không down hay giải nén được à. Thử down từ diễn đàn xem.
Ở ví dụ này bạn sẽ biết làm sao để gọi một macro từ file có sẵn, kết nối với access lấy dữ liệu vào vùng đồ thị của excel, Save đồ thị, load đồ thị vào VB
 

File đính kèm

Upvote 0
Thanks bạn về ví dụ bạn đã gửi cho mình. Mình đã làm theo nhưng thấy hơi bất tiện vì luôn fải copy 1file excel có chứa macro đi kèm. Mình muốn hỏi bạn là nếu bây giờ dữ liệu trong vb6 của mình được lưu trong mảng, mình muốn xuất dữ liệu và vẽ biểu đồ ra ngay trên file excel chỉ bằng câu lệnh của vb6 có được ko?mình dùng lưới Spreadsheet cua Microsoft Office web component 11.0 để xuất dữ liệu ra excel (ko cần fải tạo sẵn file excel chứa macro như trước nữa).
 

File đính kèm

Upvote 0
Các A/C cho mình hỏi thêm một vấn đề nữa: "Cấu trúc viết lệnh VBA trong code của Visual Basic 6"
Ví dụ như trong phần code trả lời của anh Lê Văn Duyệt ở trên, nếu tôi thay đoạn

strCode = _
"sub MyMacro()" & vbCr & " msgbox ""Inside generated macro!!!"" " & vbCr & "end sub"​
Bằng đoạn
strCode = _
"sub MyMacro()" & vbCr & _
" cells(1, 1).value =""2"" cells(1, 2).value =""3"" " & vbCr & _
"end sub"
thì luôn bị báo lỗi do trong code vba của macro sẽ hiển thị như sau:
Sub MyMacro()
cells(1, 1).value ="2" cells(1, 2).value ="3" <=Không xuống dòng
End Sub

Làm thế nào để cho chúng tách biệt thành các dòng khác nhau trong đoạn code này
Thanks
 
Upvote 0
Sửa lại thành:
"cells(1, 1).value =""2""" & vbcrlf & "cells(1, 2).value =""3"" " & vbCr & _
Hoặc
"cells(1, 1).value =""2"" : cells(1, 2).value =""3"" " & vbCr & _
 
Upvote 0
Mình có một số thắc mắc mong các A/C/E giải đáp giùm:
- Mình có làm một chương trình quản lý điểm trong Excel và có sử dụng VBA để tạo các Macro. Tuy nhiên các Macro này thường bị chương trình diệt virus xóa mất (VD: Sử dụng BKAV mà vô tình chọn Xóa tất cả Macro). Sau đó lại phải Import các Module một cách thủ công rất mất công. Vậy có cách nào để giấu các Macro này không cho các chương trình diệt virus thấy được không? Có thể sử dụng VB6 để giúp mình việc Import các Module được không?
- Trong bài của anh Duyệt, nếu không phải là thêm một Macro mới mà là Macro (Module, Form) đã tạo (trong file .bas, .frm) thì làm như thế nào?
A/C/E nào biết thì giúp mình nhé. Mình cảm ơn nhiều nhiều...
 
Upvote 0
Mình có một số thắc mắc mong các A/C/E giải đáp giùm:
- Mình có làm một chương trình quản lý điểm trong Excel và có sử dụng VBA để tạo các Macro. Tuy nhiên các Macro này thường bị chương trình diệt virus xóa mất (VD: Sử dụng BKAV mà vô tình chọn Xóa tất cả Macro). Sau đó lại phải Import các Module một cách thủ công rất mất công. Vậy có cách nào để giấu các Macro này không cho các chương trình diệt virus thấy được không? Có thể sử dụng VB6 để giúp mình việc Import các Module được không?
- Trong bài của anh Duyệt, nếu không phải là thêm một Macro mới mà là Macro (Module, Form) đã tạo (trong file .bas, .frm) thì làm như thế nào?
A/C/E nào biết thì giúp mình nhé. Mình cảm ơn nhiều nhiều...
Trong chương trình diết vius có phần "Xóa tất cả macro" Bạn đừng chọn mục này, nếu chọn thì nó sẽ quét sạch luôn đó.
 
Upvote 0
Trong chương trình diết vius có phần "Xóa tất cả macro" Bạn đừng chọn mục này, nếu chọn thì nó sẽ quét sạch luôn đó.
Đương nhiên là mình không bao giờ sử dụng tùy chọn "Xóa tất cả Macro" rồi. Vấn đề ở đây là chương trình Quản lý điểm này là mình làm cho cả trường sử dụng (chỉ 1 file cho tất cả các môn của 20 lớp, share qua mạng LAN). Chính vì nhiều người sử dụng như vậy mới hay bị xóa nhầm Macro. Lâu lâu lại bị thầy cô trong trường hỏi "Tại sao không...?" cũng hơi phiền. Vậy mới nhờ đến A/C/E giúp đỡ chứ...%#^#$-0-/.:=\+
 
Upvote 0
Web KT

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

Back
Top Bottom