Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Verwendung von Win-API im VBA

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Verwendung von Win-API im VBA (1072 mal gelesen)
GüSo
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 28. Apr. 2015 18:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Verweiswahlen.JPG


Verweiswahlen_2.JPG

 
Ausgehend von den im Beitrag "Klasse Light / AcDbLight" genannten Umständen geht es darum in einem ACAD-VBA-Programm zunächst zu ermitteln, ob auf dem Rechner bereits eine Excelinstanz läuft, damit diese gegebenenfalls einer Objektvariablen zugewiesen werden kann.

Im VBA kann ich zwar eine neue Instanz von Excel erzeugen, aber keine laufende Instanz fehlerfrei(zuverlässig) ermitteln.
......
Dim EKSL As Excel.Application, Mappe As Excel.Workbook, Blatt As Excel.Worksheet
Set EKSL = New Excel.Application
.....

Die von mir ausprobierte Lösung

Function IstExcelGestartet(EKSL) As Boolean
' prüft, ob Excel schon gestartet ist
'04.04.2008

On Error GoTo Fehler
Set EKSL = GetObject(, "Excel.application")
IstExcelGestartet = True
Mfalsch:
On Error GoTo 0
Exit Function
Fehler:
'wenn excel noch nicht gestartet ist erzeugt der getobject-Aufruf den Fehler 429
'MsgBox Err.Number
IstExcelGestartet = False
Resume Mfalsch
End Function


arbeitet nicht zuverlässig.

Ich habe noch so dunkel in Erinnerung, daß es im Windows-API eine Funktion gibt mittels der man sie laufende Instanzen beliebiger Programme melden lassen kann. Das Problem meinerseits besteht jetzt darin , daß ich mir die DLL (user32.dll) nicht laden kann. Siehe hierzu auch die Screen Shots im Anhang. Meine Frage: Geht das im VBA generell nicht oder habe ich einen Fehler in der Verfahrensweise?

------------------
MfG

Günter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 28. Apr. 2015 20:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GüSo 10 Unities + Antwort hilfreich

Hallo Günther,

So ganz verstehe ich Deinen Code noch nicht.
Du eröffnest am Anfang eine Excel-Instanz, danach prüfst Du ob ein Excel geöffnet ist?
(Lass das Set EKSL = New Excel.Application mal weg bzw. verwende es erst wenn Du es brauchst)

Der Function übergibst Du eine Variable, die dann aber nicht ausgewertet wird ...
(oder ist EKSL eine Variable innerhalb einer Prozedur und keine globale Variable? )


Hier mal eine Erweiterung eines Codes aus einem alten Beitrag im Forum (Suchfunktion),
für genauere Hinweise kannst Du selber mal hier schauen

Code:

Sub testIt()
    ' Definition der Variablen
    Dim xlApp As Excel.Application, _
        xlWB As Excel.Workbook, _
        IStartedXL As Boolean
    Dim strHilf as String
    On Error Resume Next
    Set xlApp = GetObject(, "excel.application") ' Excel Application zuordnen
    On Error GoTo 0
    If xlApp Is Nothing Then    ' Wenn es keine Excel-Application gibt
        Set xlApp = CreateObject("excel.application")  ' diese neu öffnen
        IStartedXL = True                              ' Merker setzen dieses Excel kommt von mir 
        End If
    ' Set xlWB = xlApp.Workbooks.Add    ' neues Workbook hinzufügen
    ' xlApp.Range("a1").Value = _   
        xlApp.Range("a1").Value + 1      ' irgendwas berechnen
    ' MsgBox xlApp.ActiveSheet.Range("a1").Value  ' und Ergebnis ausgeben

    strhilf = ""    ' Hier werden alle offenen Excel Workbooks angezeigt
    For L = 1 To xlApp.Workbooks.Count
      strhilf = strhilf & xlApp.Workbooks.Item(L).Path & "\" & xlApp.Workbooks.Item(L).Name & vbCrLf
    Next L
    MsgBox strhilf

    ' xlWB.Close False  ' neues Workbook schließen
    If IStartedXL Then xlApp.Quit  ' Wenn Excel neu gestartet wurde dieses beenden
    ' Set xlWB = Nothing  ' neues Workbook entfernen
    Set xlApp = Nothing  ' Excel applicationobject entfernen
    End Sub


Vielleicht hilft es Dir ja weiter

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

GüSo
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 02. Mai. 2015 18:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,

ja das hilft mir weiter. Auf den Einfall mit den Methoden GetObject und CreateObject kam ich nicht, obwohl es altbekannten grundlegende Methoden von VB sind. Es war eben zu naheliegend. Es funktioniert zuverlässig. Danke und Entschuldigung für die späte Antwort.

MfG

Günter

------------------
MfG

Günter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz