Cze wszystkim
Chciałbym przyjść i napisać plik Excel (istniejący) z SW (z makrem vba), aby wpisać nazwę mojej części, nazwę klienta...
Ale napotykam problem, gdy używam tej metody:
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
Problem polega na tym, że ten kod tworzy dla mnie nową instancję Excela
I to sprawia mi problem, zwłaszcza jeśli plik mondoc jest już otwarty w pierwszej instancji, plik jest tylko do odczytu
w przypadku, gdy plik nie jest otwarty, działa, mogę pisać, ale sam mój plik mondoc zawiera makra, które nie mogą już działać z innymi otwartymi plikami (ponieważ nie wszystkie są w tej samej instancji Excela).
Moje pytanie
czy możliwe jest otwarcie za pomocą oprogramowania pliku mondoc w tej samej instancji, co ten, który jest już uruchomiony na mojej stacji roboczej
Jeśli tak, to jak to zrobić?
Przetestowałem kilka rzeczy, ale mój poziom VBA nie jest zbyt wysoki
Dziękuję za poświęcony czas.
Witam;
Aby sprawdzić, czy plik programu Excel jest już otwarty:
Jeśli tak, używamy tego pliku.
W przeciwnym razie otwieramy ten plik:
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
Zastępując ścieżkę wskazaną w " filepath " lokalizacją pliku Excel.
Uwaga: pamiętaj, aby używać tagów </> podczas publikowania makra

… w przeciwnym razie może zostać automatycznie przetłumaczony na tekst francuski. co nie sprawia, że jest łatwy do odczytania
2 polubienia
To świetnie, dziękuję
Myślę, że tego mi brakowało
Set xlApp = GetObject(, "Excel.Application")
Jeszcze raz dziękuję za poświęcony czas, który pozwala mi iść naprzód 
1 polubienie
Witam
Mój kod jest prawie gotowy, ale nadal mam mały problem, którego nie mogę rozwiązać
po otwarciu pliku Excel jest w porządku (pojawia się i mogę wybrać swój wiersz)
z drugiej strony, jeśli plik Excel jest zamknięty, plik otwiera się dobrze, ale pozostaje w tle, jestem zmuszony wybrać go za pomocą paska narzędzi
Czy istnieje możliwość wymuszenia wyświetlania na pierwszym planie pliku Excel???
Jeśli tak, to jak to zrobić?
Dziękuję
Prawie zapomniałem, że plik Excel jest online (office365) i po otwarciu zawiera również makra.
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
Próbowałem kilku rzeczy, ustawiłem tempo, ale to nie działa
Zrobiłem to
Set xlWorkbook = xlApp.Workbooks.Open(filePath)
Set xlWorkbook = xlApp.Workbooks.Open(filePath)
To działa, ale to trochę żart, aby przezwyciężyć problem, którego nie rozumiem!!
… Jestem zakłopotany, całe makro nie powinno działać z Excelem w wersji online (musiałbyś otworzyć przeglądarkę internetową, zalogować się, zweryfikować ID), ponadto Solidworks nie jest znany z tego, że jest super kompatybilny z office 365... i nie sądzę, żeby można było sobie z tym poradzić w VBA...
Teoretycznie, aby wyświetlić okno programu Excel na pierwszym planie (w przypadku programu Excel w trybie offline), polecenie:
xlApp.Visible = True
to więcej niż wystarczająco.
1 polubienie
Aby zapewnić czytelność kodu, pamiętaj, aby umieścić deklaracje zmiennych " Dim..." " na górze... tuż pod " Sub EXPDDC() "
…
Przesuń linie:
' Nettoyez
Set xlWorkbook = Nothing
Set xlApp = Nothing
Na końcu makra, tuż nad podrzędnym końcem
1 polubienie
Nie ma obaw po mojej stronie. Office 365 od 2020 roku bez problemów
1 polubienie
Dzieje się tak dlatego, że w moim umyśle " office365 " jest wyłącznie online (microsoftonline.com). I widzę, że Excel jest zainstalowany lokalnie.
1 polubienie
Plik jest w trybie online, ale jest otwierany za pomocą lokalnej aplikacji Excel
Nie korzystam z przeglądarki Internet Explorer.
wypróbuj tryb krok po kroku (F8) i powiedz mi, czy program Excel jest widoczny na pierwszym planie, gdy dojdziesz do polecenia "xlWorkbook.Sheets("feuil1").Activate"
(wiersz 68) .
Położyłem więc kres poprzedniej linii
i w trybie krok po kroku, gdy przekraczam linię
xlWorkbook.Sheets("feuil1").Activate
Nic się nie dzieje
(Nie mogę wykonać całego kodu w trybie krokowym, ponieważ otwierając plik Excel, który sam w sobie zawiera makra, jestem zmuszony umieścić plik na pierwszym planie, aby wykonać je w trybie krokowym)
Jednak linia działa
Testowałem, zmieniając zakładki
Więc się nie pojawia, ale kiedy ręcznie umieszczam go na pierwszym planie, oczywiście podążam za wybraną zakładką
Musi pochodzić z makr, kiedy otworzyłem plik Excel
bo jak je wyłączę to działa
Patrzę w tym kierunku
Dziękuję
W wewnętrznym makrze programu Excel nie będzie ani jednego wiersza
xlApp.Visible = False
przypadkowo
lub
Application.ScreenUpdating = false
1 polubienie
To jest dokładnie to
w Workbook_Open() wywołuję makro, w którym go brakowało
Application.ScreenUpdating = true
Działa idealnie
Jeszcze raz dziękuję za poświęcony czas 


1 polubienie