Để VB6 tự động tham chiếu đến Excel (mọi phiên bản)

Liên hệ QC

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Xin hỏi mọi người
Khi dùng Vb6 để liên kế qua Excel thì phải Reference đến các phiên bản Excel tương ứng Microsof Excel 11.0 (2003) , (12.0 - 2007 , 14.0 - 2010)
Tuy nhiên, ứng với mỗi máy khác nhau thì phiên bản của Exel cũng khác nhau dẫn đến dự án không load dự án được.
Có cách nào để dự án tự động nhận dạng phiên bảng Excel để tham chiếu đến phiên bản Excel tương ứng không?

Mong nhân được đóng góp của mọi người!!!

Trân trọng
 
Xin hỏi mọi người
Khi dùng Vb6 để liên kế qua Excel thì phải Reference đến các phiên bản Excel tương ứng Microsof Excel 11.0 (2003) , (12.0 - 2007 , 14.0 - 2010)
Tuy nhiên, ứng với mỗi máy khác nhau thì phiên bản của Exel cũng khác nhau dẫn đến dự án không load dự án được.
Có cách nào để dự án tự động nhận dạng phiên bảng Excel để tham chiếu đến phiên bản Excel tương ứng không?

Mong nhân được đóng góp của mọi người!!!

Trân trọng
Bạn viết sơ qua 1 đoạn "tham chiếu" gì gì đó xem thử (mới biết nên sửa thế nào)
Thường thì ta sẽ dùng CreateObject(....) cho chắc, khỏi mất công References gì cho mất công
 
Gửi anh NDU
Em gửi anh cái code cài addin tự động, anh cho ý kiến:
PHP:
Sub Main()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim objExcel
Dim objAddinDim addin
Dim i As Long
'- Xoa Addin neu co:
On Error Resume Next
Set objExcel = CreateObject("Excel.Application")
For i = 0 To objExcel.AddIns.Count
   'Kiem tra neu Addin dang true thi bo no    
  Set objAddin = objExcel.AddIns.Item(i)    
  If objAddin.Name = "ABC.xla" Then        
     objAddin.Installed = False    
   End If
Next
'+ Kiem tra duong dan xem co ton tai ko? 
If Kiemtra_Duongdan(App.Path & "\ABC.xla") = False Then    
  Msgbox "Khong co Addin"    
    objExcel.Visible = False    
    objExcel.Quit    
    Exit Sub    
    Set objExcel = Nothing
End If
'- Cai addin theo duong dan:
install_Addin
Application.ScreenUpdating = True
End Sub
Sub Cài đặt Addin
PHP:
Sub install_Addin()
Application.ScreenUpdating = False
Dim SourceDir
Dim objExcel
Dim objAddin
SourceDir = App.Path & "\ABC.xla"
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add
'objExcel.Visible = True
Set objAddin = objExcel.AddIns.Add(SourceDir, True)
 objAddin.Installed = True
'Mở các sub Load trong Addin đó. 
Set objExcel = Nothing
End Sub
Sub Kiểm tra đường dẫn:
PHP:
Function Kiemtra_Duongdan(FileName) As Boolean 
Dim X As String
On Error Resume Next
X = GetAttr(FileName) And 0If Err = 0 Then Kiemtra_Duongdan = True Else Kiemtra_Duongdan = False
End Function
 
Lần chỉnh sửa cuối:
Gửi vba_gpe và mọi người.
Mình thử đăng ký file Excel.exe vào thư viện giống như các ocx, dll khác có được không?
Mã:
Sub Dangky_Excel()
        Dim Str1 As String, Str2 As String, Str3 As String
        Str1 = "C:\Program Files\Microsoft Office\Office11\Excel.exe"
        Str2 = "C:\Program Files\Microsoft Office\Office12\Excel.exe"
        Str3 = "C:\Program Files\Microsoft Office\Office14\Excel.exe"
         If Kiemtra_duongdan(Str1) = True Then
            Shell "Regsvr32 /s " & Str1, vbMaximizedFocus
        End If
       If Kiemtra_duongdan(Str2) = True Then
            Shell "Regsvr32 /s " & Str2, vbMaximizedFocus
        End If
        If  Kiemtra_duongdan(Str3) = True Then
            Shell "Regsvr32 /s " & Str3, vbMaximizedFocus
        End If
End sub
Mọi người cho ý kiến!
 
Lần chỉnh sửa cuối:
Bạn không cần phải gữi nguyên code... Vấn đề là bạn đang bị trục trặc chổ nào?
Chỗ này trục trặc nè:

If Kiemtra_Duongdan(App.Path & "\ABC.xla") = False Then
( Biến App chưa có giá trị)

Mà hình như code copy lên thiếu và sai tùm lum:

- Không xuống dòng
- 0If là gì?
 
Lần chỉnh sửa cuối:
Bạn không cần phải gữi nguyên code... Vấn đề là bạn đang bị trục trặc chổ nào?
Dạ em bị vướng ở cái đoạn:
Mã:
Set objAddin = objExcel.AddIns.Add(SourceDir, True)
objAddin.Installed = True  'Chổ này nó không có cài cái addin vào excel mà nó thoát luôn
.

1: Trên máy tính em đem qua test, khi em debug đến cái đọan objAddin.Installed = True thì Excel nó không có cài cái Addin vào Workbook đang mở (vì sự kiện Addmenu em đặt trong Addin này không load lên) mà nó tự thoát luôn cái sub install_Addin, chuyển sang cái sub Main của chương trình.
Rỏ ràng em debug trong cái máy hiện tại (cái máy đã cài được addin bằng code này), khi tới đoạn này nó sẽ tự động load cái Addmenu vào. Đem qua bên máy test thì không được. Máy hiện tại em sử dụng Excel 2007, máy đem test sử dung 2003.
Code của phần cài addin (Có chứa đoạn code em vướng)
Mã:
Sub install_Addin()
Application.ScreenUpdating = False
Dim SourceDir
Dim objExcel
Dim objAddin
SourceDir = App.Path & "\ABC.xla"
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add
objExcel.Visible = True      'Hiện Excel
Set objAddin = objExcel.AddIns.Add(SourceDir, True)
objAddin.Installed = True
Set objExcel = Nothing
End Sub
2: Khi em viết bài trong diễn đàn, em gõ một số chữ ví dụ "Excel" gõ kiểu Vni thì gặp sự cố con trỏ nó nhãy về đầu hàng 2 lần, phải trỏ lại 2 lần mới đánh được. Cụ thể :
Đánh chữ "Excel" nhé:
[1] => Nhập vào: "Ex" nó chuyển thành "Ẽ" và tự động chuyển con trỏ về đầu hàng;
[2] => Để con trỏ vào sau chữ "Ẽ" rồi đánh tiếp chữ "x" thì nó mới thành "Ex" và con trỏ lại tự động nhãy về đầu hàng
[3] => đặt tiếp con trỏ vào đánh tiếp 1 ký tự nữa (con trỏ ngay sau chữ "Ex") thì lúc đó mới đánh được
Không biết có ai gặp trường hợp này không. Chỉ em cách khắc phục với

Mong nhận được đóng góp của các anh chị!
 
Lần chỉnh sửa cuối:
Chào VBA_Gpe,

1. Nếu bạn muốn tạo add-in cho Excel từ Visual basic 6, thì bạn nên tham khảo link sau:
http://www.cpearson.com/excel/ComAddInInVB6.htm
http://support.microsoft.com/kb/285337

Ngoài ra, nếu bạn viết code ở trên trong VB6 thì đoạn code này
Mã:
Application.ScreenUpdating = False
hình như sai.

2. Khi bạn post trong diễn đàn, nếu bạn có đang dùng bộ gõ riêng, thì bạn nên tắt bộ gõ của diễn đàn bằng cách nhấn F9. (Bạn để ý thanh bên dưới.

Lê Văn Duyệt
 
Web KT
Back
Top Bottom