Öffnen Sie die Excel-Datei, ohne eine neue Instanz zu erstellen

Hallo ihr alle
Ich möchte kommen und eine Excel-Datei (vorhanden) aus SW (mit einem VBA-Makro) schreiben, um den Namen meines Teils, den Namen des Kunden zu schreiben...
Aber ich stoße auf ein Problem, wenn ich diese Methode verwende:

Dim xlApp As Excel.Application
Set xlApp = Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet

With xlApp
    .Visible = True
    .Workbooks.Open ("mondoc.xlsm")
    
End With

Das Problem ist, dass dieser Code eine neue Instanz von Excel für mich erstellt
Und das bereitet mir ein Problem, vor allem wenn die mondoc-Datei bereits in einer ersten Instanz geöffnet ist, die Datei schreibgeschützt ist
Falls die Datei nicht geöffnet wird, funktioniert sie, ich kann schreiben, aber meine Mondoc-Datei selbst enthält Makros, die nicht mehr mit den anderen geöffneten Dateien zusammenarbeiten können (weil sie sich nicht alle in derselben Instanz von Excel befinden).

Meine Frage
Ist es möglich, die mondoc-Datei über die SW in derselben Instanz zu öffnen, die bereits auf meinem Arbeitsplatz ausgeführt wird?
Wenn ja, wie geht das?
Ich habe mehrere Dinge getestet, aber mein VBA-Level ist nicht sehr hoch
Vielen Dank für die Zeit.

Hallo;
So überprüfen Sie, ob bereits eine Excel-Datei geöffnet ist:
Wenn ja, verwenden wir diese Datei.
Andernfalls öffnen wir diese Datei:

Sub CheckAndOpenExcelFile()
    Dim xlApp As Object
    Dim xlWorkbook As Object
    Dim filePath As String
    Dim isFileOpen As Boolean

    ' Chemin du fichier Excel
    filePath = "C:\Chemin\Vers\Votre\Fichier.xlsx"

    ' Vérifiez si Excel est déjà ouvert
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    If xlApp Is Nothing Then
        ' Si Excel n'est pas ouvert, ouvrez une nouvelle instance
        Set xlApp = CreateObject("Excel.Application")
    End If
    On Error GoTo 0

    ' Vérifiez si le fichier est déjà ouvert
    isFileOpen = False
    For Each xlWorkbook In xlApp.Workbooks
        If xlWorkbook.FullName = filePath Then
            isFileOpen = True
            Set xlWorkbook = xlApp.Workbooks.Open(filePath)
            Exit For
        End If
    Next xlWorkbook

    ' Si le fichier n'est pas ouvert, ouvrez-le
    If Not isFileOpen Then
        Set xlWorkbook = xlApp.Workbooks.Open(filePath)
    End If

    ' Affichez Excel (facultatif)
    xlApp.Visible = True

    ' Faites quelque chose avec le fichier Excel
    ' ...

    ' Nettoyez
    Set xlWorkbook = Nothing
    Set xlApp = Nothing
End Sub

Indem Sie den in " Dateipfad " angegebenen Pfad durch den Speicherort Ihrer Excel-Datei ersetzen.

Hinweis: Denken Sie daran, die </>-Tags zu verwenden, wenn Sie ein Makro posten
image

… andernfalls kann es automatisch in französischen Text übersetzt werden. was das Ablesen nicht leicht macht

2 „Gefällt mir“

Vielen Dank
Es ist ein Test für das Ganze
:pray:

Es ist großartig, danke

Das hat mir gefehlt, glaube ich

Set xlApp = GetObject(, "Excel.Application")

Nochmals vielen Dank für die aufgewendete Zeit, sie ermöglicht es mir, voranzukommen :+1:

1 „Gefällt mir“

Hallo
Mein Code ist fast fertig, aber ich habe immer noch ein kleines Problem, das ich anscheinend nicht lösen kann
Wenn die Excel-Datei geöffnet wird, ist sie in Ordnung (sie wird angezeigt und ich kann meine Zeile auswählen)
auf der anderen Seite, wenn die Excel-Datei geschlossen wird, öffnet sich die Datei gut, bleibt aber im Hintergrund, ich bin gezwungen, sie über die Symbolleiste auszuwählen
Gibt es die Möglichkeit, die Anzeige im Vordergrund der Excel-Datei zu erzwingen???
Wenn ja, wie geht das?
Vielen Dank
Fast hätte ich es vergessen, die Excel-Datei ist online (office365) und sie enthält auch Makros, wenn sie geöffnet wird.

Sub EXPDDC()



Set swApp = GetObject(, "SldWorks.Application") 'CreateObject("SldWorks.Application")
    Set swmodel = swApp.ActiveDoc
    
If swmodel Is Nothing Then
    Exit Sub
End If

If swmodel.GetType = 3 Then

    Set swDraw = swmodel
    Set swView = swDraw.GetFirstView
    Set swView = swView.GetNextView
    Set swParentModel = swView.ReferencedDocument
    prop1 = swParentModel.GetTitle & "-" & swParentModel.CustomInfo2("", "REVISION")
    If swParentModel.CustomInfo2("", "type") = "FAB" Then
    prop2 = swParentModel.CustomInfo2("", "client")
    ElseIf prop4 = "QUINCAI" Then
    prop2 = ""
    Else: MsgBox "MANQUE CODE FAMILLE"
    End If
    If swmodel.CustomInfo2("", "ETAT") = "VALIDE" And swParentModel.CustomInfo2("", "ETAT") = "VALIDE" Then prop3 = "etat ok"
    
    Else
    
    prop1 = swmodel.GetTitle & "-" & swmodel.CustomInfo2("", "REVISION")
    If swmodel.CustomInfo2("", "type") = "FAB" Then
    prop2 = swmodel.CustomInfo2("", "client")
    ElseIf prop4 = "QUINCAI" Then
    prop2 = ""
    Else: MsgBox "MANQUE CODE FAMILLE"
    End If
    If swmodel.CustomInfo2("", "ETAT") = "VALIDE" Then prop3 = "etat ok"
    
    
End If

If prop3 <> "etat ok" Then

    réponse = MsgBox("LES FICHIERS NE SONT PAS A L'ETAT   " & Chr(34) & " VALIDÉ " & Chr(34) & vbCrLf & "SOUHAITEZ VOUS TOUS DE MÊME EXPORTER VERS" & vbCrLf & Chr(34) & " DEMANDE DE CHIFFRAGE " & Chr(34) & " ?", vbExclamation + vbYesNo + vbDefaultButton2, "ETAT FICHIER")

End If
        
    If réponse = vbYes Or prop3 = "etat ok" Then
    
        'traitement
        Dim xlApp As Object
        Dim xlWorkbook As Object
        Dim filePath As String
        Dim Selec As Range
    
        ' Chemin du fichier Excel
        filePath = "chemin/monfichier.xlsm"

        'Vérifiez si Excel est déjà ouvert
        On Error Resume Next
        Set xlApp = GetObject(, "Excel.Application")
        If xlApp Is Nothing Then
        ' Si Excel n'est pas ouvert, ouvrez une nouvelle instance
        Set xlApp = CreateObject("Excel.Application")
        
    End If
    
        On Error GoTo 0
        Set xlWorkbook = xlApp.Workbooks.Open(filePath)
       
        ' Affichez Excel (facultatif)
        xlApp.Visible = True
        xlWorkbook.Sheets("feuil1").Activate
        

        ' Faites quelque chose avec le fichier Excel
        On Error Resume Next    'au cas où on clique sur Annuler
        Set Selec = xlApp.InputBox("CLIQUER SUR LA LIGNE DE DESTINATION", Type:=8)
        On Error GoTo 0
    
    If Not Selec Is Nothing Then
        Ligne = Selec.Row
        xlWorkbook.Sheets("feuil1").Cells(Ligne, 2) = prop1
        xlWorkbook.Sheets("feuil1").Cells(Ligne, 4) = prop2
        xlWorkbook.Save
    Else
        swApp.Visible = True
        swApp.SendMsgToUser "EXPORT ANNULÉ!"
    End If
  
    ' Nettoyez
    Set xlWorkbook = Nothing
    Set xlApp = Nothing

Else
    MsgBox "VEUILLEZ MODIFIER L'ETAT DES FICHIERS" & vbCrLf & "( AUCUNE ACTION EFECTUEE !!! )"
    End If

End Sub
saisissez ou collez du code ici

Ich habe mehrere Dinge ausprobiert, ein Tempo eingestellt, aber es funktioniert nicht
Das habe ich getan

        Set xlWorkbook = xlApp.Workbooks.Open(filePath)
        Set xlWorkbook = xlApp.Workbooks.Open(filePath)

Es funktioniert, aber es ist ein kleiner Witz, um ein Problem zu lösen, das ich nicht verstehe!!

… Ich bin perplex, das ganze Makro sollte nicht mit Excel in der Online-Version funktionieren (man müsste einen Webbrowser öffnen, sich anmelden, die ID validieren), außerdem ist Solidworks nicht dafür bekannt, super kompatibel mit Office 365 zu sein... und ich glaube nicht, dass es möglich ist, es in VBA zu verwalten...

Um das Excel-Fenster im Vordergrund anzuzeigen (für ein Offline-Excel), gehen Sie theoretisch wie folgt vor:

xlApp.Visible = True

ist mehr als genug.

1 „Gefällt mir“

Um die Lesbarkeit Ihres Codes zu gewährleisten, denken Sie daran, Ihre Variablendeklarationen mit dem " Dim..."  " ganz oben... knapp unter " Sub EXPDDC() "

Verschieben Sie die Linien:

    ' Nettoyez
    Set xlWorkbook = Nothing
    Set xlApp = Nothing

Am Ende Ihres Makros, direkt über dem Ende sub 

1 „Gefällt mir“

Keine Sorgen meinerseits. Office 365 seit 2020 ohne Probleme

1 „Gefällt mir“

Das liegt daran, dass " office365 " meiner Meinung nach ausschließlich online (microsoftonline.com) ist. Und ich kann sehen, dass Excel lokal installiert ist.

1 „Gefällt mir“

Die Datei ist online, wird aber mit der lokalen Excel-Anwendung geöffnet
Ich arbeite nicht über einen Web-Explorer.

Probieren Sie den Schritt-für-Schritt-Modus (F8-Taste) aus und teilen Sie mir mit, ob Excel im Vordergrund sichtbar ist, wenn Sie zum Befehl gelangen "xlWorkbook.Sheets("feuil1").Activate"
(Zeile 68) .

Also habe ich die vorherige Zeile gestoppt
und im Schritt-für-Schritt-Modus, wenn ich die Linie überschreite

xlWorkbook.Sheets("feuil1").Activate

Nichts passiert

(Ich kann nicht den gesamten Code im Schrittmodus ausführen, da ich beim Öffnen der Excel-Datei, die selbst Makros enthält, gezwungen bin, die Datei in den Vordergrund zu stellen, um sie im Schrittmodus auszuführen.)

Die Linie funktioniert jedoch
Ich habe getestet, indem ich die Registerkarten gewechselt habe
Es wird also nicht angezeigt, aber wenn ich es manuell in den Vordergrund stelle, folge ich natürlich dem gewählten Tab

Es muss von den Makros kommen, als ich meine Excel-Datei geöffnet habe
denn wenn ich sie ausschalte, funktioniert es
Ich schaue in diese Richtung
Vielen Dank

In Ihrem internen Excel-Makro hätten Sie keine einzige Zeile
xlApp.Visible = False
zufällig
oder
Application.ScreenUpdating = false

1 „Gefällt mir“

Genau das ist es
im Workbook_Open() rufe ich ein Makro auf, in dem es fehlte
Application.ScreenUpdating = wahr

Es funktioniert perfekt
Nochmals vielen Dank für die Zeit, die Sie sich genommen haben :pray::wink::+1:

1 „Gefällt mir“