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
… andernfalls kann es automatisch in französischen Text übersetzt werden. was das Ablesen nicht leicht macht
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 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:
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
Das liegt daran, dass " office365 " meiner Meinung nach ausschließlich online (microsoftonline.com) ist. Und ich kann sehen, dass Excel lokal installiert ist.
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