Как отключить объединение экземпляров Excel? - PullRequest
0 голосов
/ 14 апреля 2019

В последних версиях Excel появилась новая функция, в которой Excel игнорирует запрос нового сеанса, если обнаруживает, что он уже запущен.Я хочу знать, как это остановить.

В этой статье службы поддержки Microsoft предлагается добавить параметр реестра

Computer\HKCU\Software\Microsoft\Office\16.0\Excel\Options\DisableMergeInstance = 1

, но у меня это не сработало.Другие могут проверить, работает ли он для них и сообщить?

Тем временем я обнаружил, что удержание клавиши ALT при запуске нового экземпляра Excel вызывает диалоговое окно с надписью «Хотите запустить новый экземплярExcel? (Да / Нет) ", это показано в этой статье Microsoft .Это хороший обходной путь, но я бы хотел, чтобы настройки реестра работали.

1 Ответ

0 голосов
/ 10 мая 2019

Вот альтернативный путь ... если он вам пригодится.

большой поклонник блога кстати!

Option Explicit

Private Declare Function IIDFromString Lib "ole32" (ByVal lpszIID As Long, IID As Any) As Long

Private Declare Function CoCreateInstance Lib "ole32" (rclsid As Any, ByVal pUnkOuter As Long, _
    ByVal dwClsContext As Long, riid As Any, ByVal ppv As Long) As Long

Private Declare Sub RtlMoveMemory Lib "kernel32" (pDst As Any, pSrc As Any, ByVal dlen As Long)

Private Const CLSID_EXCELAPP    As String = "{00024500-0000-0000-C000-000000000046}" ' Excel COM object GUID.

Private Const IID_DISPATCH      As String = "{00020400-0000-0000-C000-000000000046}" 'IDispatch Interface GUID.

Private Const IID_NULL          As String = "{00000000-0000-0000-0000-000000000000}"


Private Type GUID
    data1                       As Long
    data2                       As Integer
    data3                       As Integer
    data4(7)                    As Byte
End Type



Private Const CLSCTX_LOCAL_SERVER   As Long = &H4

Private Const S_OK                  As Long = &H0
Private Const E_NOINTERFACE         As Long = &H80004002
Private Const REGDB_E_CLASSNOTREG   As Long = &H80040154
Private Const CLASS_E_NOAGGREGATION As Long = &H80040110
Private Const E_POINTER             As Long = &H80004003

Sub CreateNewExcelInstance()
    Dim ExcelClassID        As GUID
    Dim IID                 As GUID
    Dim ObjectPtr           As Long
    Dim ExcelIIDHandle      As Long

    ExcelIIDHandle = IIDFromString(StrPtr(CLSID_EXCELAPP), ExcelClassID)
    If ExcelIIDHandle <> 0 Then Exit Sub

    ExcelIIDHandle = IIDFromString(StrPtr(IID_DISPATCH), IID)
    If ExcelIIDHandle <> 0 Then Exit Sub

    ExcelIIDHandle = CoCreateInstance(ExcelClassID, 0, CLSCTX_LOCAL_SERVER, IID, VarPtr(ObjectPtr))

    Debug.Print ExcelIIDHandle = S_OK

'''''''''''''''''''''''''
'
'    -> If you want the second instance to be visible:
'
'               Dim SecondExcelInstance as Object
'
'               RtlMoveMemory SecondExcelInstance, ObjectPtr, 4
'
'               SecondExcelInstance.Visible = True
'               SecondExcelInstance.Workbooks.Add
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...