Excel und VB: Wie kann VB prüfen, ob Excel aufgrund manueller Zelleingabe gerade für VB gesperrt ist?

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Excel und VB: Wie kann VB prüfen, ob Excel aufgrund manueller Zelleingabe gerade für VB gesperrt ist?

    Moin,

    mein VB6-Programm führt automatische Bearbeitungen in Excel durch.

    Vor Start der Excelbearbeitung möchte ich aber sichergehen, dass Excel nicht gerade durch eine manuelle Nutzung gesperrt ist. Wie realisiere ich dies?

    Hab' mich dumm und dämlich gegoogelt und bin nicht weiter gekommen. Über eine hilfreiche Antwort würde ich mich sehr freuen!

    Grüße vom VBSchlumpf
    Was genau verstehst du unter "durch manuelle Nutzung gesperrt"?
    Du kannst prüfen, ob es bereits eine Excel Instanz gibt oder du kannst prüfen, ob eine spezielle Arbeitsmappe geöffnet ist.
    Das ist meine Signatur und sie wird wunderbar sein!
    Damit meine ich, dass z.B. der Nutzer gerade in eine Zelle etwas eingibt oder dabei ist, eine geöffnete Datei zu speichern.

    Und genau das möchte ich mittels VB prüfen können, um hinterher einen Warnhinweis abgeben zu können, dass der Nutzer bei Excel auf die ESC-Taste drücken und Excel erstmal in Ruhe lassen möge.

    Hoffe, ich konnte mich klar genug ausdrücken...



    (Dabei hat mein Programm bereits sichergestellt, dass das Excelprogramm bereits geöffnet ist, also bereits eine Excelinstanz existiert. Ob Dateien geöffnet sind oder nicht, spielt hier keine Rolle.)
    Danke für den Hinweis, die Instanz Visible auf false zu setzen. Merke ich mir.

    Ein kleiner VB-Codeauszug:

    Sub Main()
    dim exc_obj as Object Set exc_obj = Nothing
    Set exc_obj = GetApplication("Excel.Application")
    If (exc_obj Is Nothing) Then
    Exit Sub
    End If
    ...

    End Sub

    Dies wäre ein Codeauszug. Nach der Prüfung, ob Excel geöffnet ist soll eben geprüft werden, ob das Programm im obigen Sinne gerade aktiv genutzt wird, um in diesem Falle einen Hinweis (ggf. mit ESCAPE-Signal an Excel) auszugeben.

    Wobei mir gerade einfällt, dass es genügen könnte, einfach ein ESC-Signal an Excel zu schicken. Wenn mir da jemand weiterhelfen könnte, wäre ich schon froh...

    Grüße vom VBSchlumpf



    P.S.: Anbei die Funktion GetApplication

    Public Function GetApplication(ByVal AppClass As String) As Object
    'Die Funktion prüft ob die externe Anwendung bereits läuft, wenn ja wird diese als nicht neu geöffnet
    'wenn nein wird Anwendung neu geöffnet und Doc angelegt
    'AppClass = "OpenOffice.Application"
    Const vbErr_AppNotRun = 429

    On Error Resume Next
    ' If Admin_Case = 0 Then
    Set GetApplication = GetObject(Class:=AppClass)
    ' End If
    If Err.Number = vbErr_AppNotRun Then
    MsgBox "Bitte starten Sie Excel von der Haupt-Leiste und wiederholen den Vorgang ...", vbCritical, "Excel manuel starten"
    'Set GetApplication = CreateObject(AppClass)
    End If
    On Error GoTo 0

    End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VBSchlumpf“ ()

    VBSchlumpf schrieb:

    Set exc_obj = GetApplication("Excel.Application")
    Warum willst du dich unbedingt an eine bestehenden Instanz anbinden, deren Status du nicht genau kennst?
    Erzeuge doch eine neue Instanz, die dir allein gehört

    Visual Basic-Quellcode

    1. Set exc_obj = CreateObject("Excel.Application")
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --