2008-10-17 45 views
10

tôi đang cố gắng để tạo ra một thể hiện mới của Excel bằng VBA sử dụng:tải addins khi Excel được khởi tạo theo chương trình

Set XlApp = New Excel.Application

Vấn đề là ví dụ mới này của Excel không tải tất cả các addins đó tải khi tôi mở Excel bình thường ... Có bất kỳ điều gì trong đối tượng Excel Application để tải trong tất cả các addins do người dùng chỉ định không?

Tôi không cố gắng tải một bổ trợ cụ thể, mà là làm cho ứng dụng Excel mới hoạt động như thể người dùng tự mở nó, vì vậy tôi thực sự đang tìm kiếm danh sách tất cả người dùng đã chọn ins thường tải khi mở Excel.

Trả lời

24

Tôi đã xem xét lại vấn đề này và bộ sưu tập Application.Addins dường như có tất cả các bổ trợ được liệt kê trong menu Tools-> Addins, với giá trị boolean cho biết có cài đặt addin hay không. Vì vậy, những gì dường như làm việc cho tôi bây giờ là để lặp qua tất cả các addins và nếu .Installed = true sau đó tôi thiết lập .Installed để False và trở lại True, và rằng dường như tải đúng addins của tôi.

Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean 

    Dim CurrAddin As Excel.AddIn 

    For Each CurrAddin In TheXLApp.AddIns 
     If CurrAddin.Installed Then 
      CurrAddin.Installed = False 
      CurrAddin.Installed = True 
     End If 
    Next CurrAddin 

End Function 
+0

+1 theo câu hỏi của riêng bạn! Loại gian lận. ;-) Câu trả lời hay, mặc dù điều này chắc chắn thêm vào cơ thể của kiến ​​thức. –

+0

Có, đây là giải pháp cho sự cố "AddIns not loaded" – A9S6

+0

Đã gây phiền toái cho vấn đề này quá lâu. Câu trả lời hay. – JDunkerley

-1

Hãy thử:

Set XlApp = CreateObject("Excel.Application")

5

Sử dụng CreateObject("Excel.Application") sẽ có kết quả tương tự như sử dụng New Excel.Application, không may.

Bạn sẽ phải tải Addins mà bạn cần riêng theo đường dẫn tệp & tên bằng phương pháp Application.Addins.Add(string fileName).

+0

Điều này rất hữu ích cho trường hợp của tôi, nơi tôi khởi chạy Excel và tôi muốn một Tiện ích bổ sung thường không được kích hoạt để hoạt động. – 4AM

2

Tôi để lại câu trả lời này ở đây cho bất kỳ ai khác gặp sự cố này, nhưng sử dụng JavaScript.

Một nền tảng nhỏ ... Trong công ty của tôi, chúng tôi có ứng dụng web của bên thứ ba đã sử dụng JavaScript để khởi chạy Excel và tạo bảng tính ngay lập tức. Chúng tôi cũng có một bổ trợ Excel ghi đè hành vi của nút Lưu. Trình bổ sung cung cấp cho bạn tùy chọn lưu tệp cục bộ hoặc trong hệ thống quản lý tài liệu trực tuyến của chúng tôi.

Sau khi chúng tôi nâng cấp lên Windows 7 và Office 2010, chúng tôi đã nhận thấy sự cố với ứng dụng web tạo bảng tính của chúng tôi. Khi JavaScript tạo bảng tính trong Excel, đột nhiên nút Lưu không còn hoạt động nữa. Bạn sẽ nhấp vào lưu và không có gì xảy ra.

Sử dụng các câu trả lời khác ở đây tôi đã có thể xây dựng một giải pháp bằng JavaScript. Về cơ bản chúng ta sẽ tạo đối tượng ứng dụng Excel trong bộ nhớ, sau đó tải lại một bổ trợ cụ thể để có được hành vi nút lưu của chúng ta trở lại. Đây là phiên bản đơn giản của bản sửa lỗi của chúng tôi:

function GenerateSpreadsheet() 
{ 
    var ExcelApp = getExcel(); 
    if (ExcelApp == null){ return; } 

    reloadAddIn(ExcelApp); 

    ExcelApp.WorkBooks.Add; 
    ExcelApp.Visible = true; 
    sheet = ExcelApp.ActiveSheet; 

    var now = new Date(); 
    ExcelApp.Cells(1,1).value = 'This is an auto-generated spreadsheet, created using Javascript and ActiveX in Internet Explorer'; 

    ExcelApp.ActiveSheet.Columns("A:IV").EntireColumn.AutoFit; 
    ExcelApp.ActiveSheet.Rows("1:65536").EntireRow.AutoFit; 
    ExcelApp.ActiveSheet.Range("A1").Select; 

    ExcelApp = null; 
} 

function getExcel() { 
    try { 
     return new ActiveXObject("Excel.Application"); 
    } catch(e) { 
     alert("Unable to open Excel. Please check your security settings."); 
     return null; 
    } 
} 

function reloadAddIn(ExcelApp) { 
    // Fixes problem with save button not working in Excel, 
    // by reloading the add-in responsible for the custom save button behavior 
    try { 
     ExcelApp.AddIns2.Item("AddInName").Installed = false; 
     ExcelApp.AddIns2.Item("AddInName").Installed = true; 
    } catch (e) { } 
} 
Các vấn đề liên quan