Способ определить, является ли экземпляр Excel встроенным? - PullRequest
1 голос
/ 10 февраля 2012

Мы работаем с программой, которая встраивает Excel в более крупную программу (SAP Xcelsius / Dashboard Designer). Есть ли способ, используя VBA, определить, является ли текущий экземпляр Excel экземпляром Embedded или нет?

Встраивание происходит в результате вызова командной строки:

"C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" -Embedding

1 Ответ

1 голос
/ 28 февраля 2017

Попробуйте это в VBA:

Option Base 0
Option Explicit

Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)

Function CmdToStr(Cmd As Long) As String
   Dim Buffer() As Byte
   Dim StrLen As Long

   If Cmd Then
      StrLen = lstrlenW(Cmd) * 2
      If StrLen Then
         ReDim Buffer(0 To (StrLen - 1)) As Byte
         CopyMemory Buffer(0), ByVal Cmd, StrLen
         CmdToStr = Buffer
      End If
   End If
End Function

Private Sub Workbook_Open()
    Dim CmdRaw As Long
    Dim CmdLine As String
    Dim CmdArgs As Variant

    Dim ValidationType As String
    Dim SourcePath As String
    Dim TargetPath As String

    CmdRaw = GetCommandLine
    CmdLine = CmdToStr(CmdRaw)

    If Strings.InStr(1, CmdLine, "-Embedding", vbTextCompare) > 0 Then
        Call MsgBox("IsEmbedded")
    End If
End Sub

VBA-Base-Sourcecode взят из: https://thebestworkers.wordpress.com/2012/04/10/passing-command-line-arguments-to-a-macro-enabled-office-object/


Попробуйте это в C # (VSTO):

var isEmbedded = new List<string>(Environment.GetCommandLineArgs()).Contains("-Embedding");
MessageBox.Show(string.Format("IsEmbedded={0}", isEmbedded));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...