miladali
Registered User
- تاریخ عضویت
- 5 ژانویه 2006
- نوشتهها
- 735
- لایکها
- 722
من نیاز داشتم یک ماکرو رو در تعداد زیادی فایل اکسل اجرا کننم بنابرین با استفاده از Matlab یه برنامه کوچیک به شکل زیر نوشتم
حالا این برنامه به جای که بیاد به ما کمک کنه یه مشکل بسیار اساسی برای ما بوجود آورد. اونم اینکه وقتی من فایل اکسل رو از تو فولدر باز میکنم نه Add-in ها لود میشوند و نه حتی ماکروها، با وجود اینکه تیک آنها تو آپشن خورده. اما اگر از تو Start Menu یا Quick Lunch خود اکسل رو باز میکنم بدون مشکل این ماکروها و Add-in ها لود میشند.
با گشت و گذاری که تو نت زدیم به یکی برخوردیم که مشکلی مشابه من داشت و راه حل زیر رو برای جل این مشکل نوشته بود که من نمیدونم چطوزی اعمالش کنم. حالا اط دوستان کسی میتونه این راه حل رو به زبون ساده تری بیان کنه یا راه حل دیگه ای برای حل این مشکل بگه؟؟
کد:
ex = actxserver('excel.application');
Name=['S8-ts' num2str(ts(k,1)) '-tb' num2str(tb(w,1)) '-eb' num2str(eb1(i,1)) '-es' num2str(es1(j,1)),'-n1.xlsx']; %%??
ex.Workbooks.Open(['E:\Thesis\SAPModel\Results\S8\Unidirectional-K1-M1\',Name]);
ex.ExecuteExcel4Macro(' !S8_sym()');
حالا این برنامه به جای که بیاد به ما کمک کنه یه مشکل بسیار اساسی برای ما بوجود آورد. اونم اینکه وقتی من فایل اکسل رو از تو فولدر باز میکنم نه Add-in ها لود میشوند و نه حتی ماکروها، با وجود اینکه تیک آنها تو آپشن خورده. اما اگر از تو Start Menu یا Quick Lunch خود اکسل رو باز میکنم بدون مشکل این ماکروها و Add-in ها لود میشند.
با گشت و گذاری که تو نت زدیم به یکی برخوردیم که مشکلی مشابه من داشت و راه حل زیر رو برای جل این مشکل نوشته بود که من نمیدونم چطوزی اعمالش کنم. حالا اط دوستان کسی میتونه این راه حل رو به زبون ساده تری بیان کنه یا راه حل دیگه ای برای حل این مشکل بگه؟؟
کد:
When an IDTExtensibility2 dll is registered, it automatically creates HKCU entries for the load behavior, add-in name, etc. But I also had my setup file register the add-in to HKLM, so that it would be available to all users on a machine. This caused double registry entries on the system.
I didn't think this would be the cause of the problem. I manually edited the HKCU entries and Excel seemed to ignore them and follow the HKLM entries. However, I received a tip from another developer explaining that they had the same problem, and their solution was to delete the duplicate registry entries. I tried it and it seems to have resolved the problem for the (very small number of) people who reported the bug.
The Inno Setup code below will add the HKLM entries, double-check that the load behavior is correct (because I'm paranoid), then delete the HKCU entry. Substitite your file attributes wherever you see ALL CAPS.
[Registry]
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: FriendlyName; ValueData: ADDIN_NAME
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: string; ValueName: Description; ValueData: ADDIN_DESC
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: LoadBehavior; ValueData: 3
Root: HKLM; Subkey: Software\Microsoft\Office\Excel\Addins\CONNECT_CLASS; ValueType: dword; ValueName: CommandLineSafe; ValueData: 0
// Set load behavior to on start up
procedure ResetAddinRegKeys();
var
bUpdate : Boolean;
LoadBehaviorKey : Cardinal;
begin
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS', 'LoadBehavior', LoadBehaviorKey) then begin
if LoadBehaviorKey <> 3 then begin
bUpdate := True;
end;
end else begin
bUpdate := True;
end;
if bUpdate = True then begin
RegWriteDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS','LoadBehavior', 3);
end;
if RegKeyExists(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin
if RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS') then begin;
//MsgBox('Duplicate keys deleted', mbInformation, MB_OK);
end;
end;
end;
function GetCustomSetupExitCode: Integer;
begin
ResetAddinRegKeys;
Result := 0;
end;
For my MSI installer, I have the commit section of the installation call the following VBScript:
Sub RemoveAddinHKCUKeys()
On Error Resume Next
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\CommandLineSafe"
WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\Description"
WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\FriendlyName"
WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\LoadBehavior"
WshShell.RegDelete "HKCU\SOFTWARE\Microsoft\Office\Excel\Addins\CONNECT_CLASS\"
If Err.Number <> 0 The Err.Clear
End Sub