API Solidworks: Tworzenie pliku Excel

Set xlApplication = CreateObject("Excel.Application")
    xlApplication.Visible = True
    DoEvents
    Set xlWorkBook = xlApplication.Workbooks
    xlWorkBook.Add
    Set xlFeuilEnse = xlApplication.ActiveSheet
    DoEvents
    
    'Création et renommage des feuilles
    
    Set xlFeuilMeca = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))
    Set xlFeuilComm = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))
    xlFeuilEnse.Name = "ENSEMBLES"
    xlFeuilMeca.Name = "PIECES MECANIQUES"
    xlFeuilComm.Name = "ELEMENTS DU COMMERCE"

Witam

 

Tworzę makro, aby utworzyć plik Excela i dodać do niego informacje. Mam problem z utworzeniem pliku Excel.

Makro działa ściśle 1 raz na 2 i 1 raz na 2. Myślę, że jest problem w moim tworzeniu pliku, ale szukałem w necie i nic nie znalazłem.

 

Czy ktoś może mi pomóc?

Oto mój fragment kodu do tworzenia pliku Excel:

 

 

 

Być może miałem ostatnio ten sam problem, spójrz na procesy, po użyciu makra, jeśli excel jest nadal w użyciu, oznacza to, że nie zamykasz całkowicie procesu i idzie nie tak przy drugim uruchomieniu

https://www.lynkoa.com/forum/solidworks/probl%C3%A8me-s%C3%A9lection-fichier-api

 

Na przykład na końcu makra: 

Sub FermetureExcel()

    Set xlFeuilMeca = Nothing
    Set xlFeuilComm = Nothing

    'Fermeture du classeur et de Excel
    oXL.DisplayAlerts = False
    oXL.Workbooks.Close
    oXL.Quit
    oXL.DisplayAlerts = True
    'Désallocation de la mémoire
    Set oSH = Nothing
    Set oWB = Nothing
    Set oXL = Nothing
End Sub

 

Pozdrowienia

2 polubienia

Witam

Jak powiedział mandragora i jak wskazano w linku, do którego się odnosi:

"pachnie jak zasób Excela, który nie jest zwolniony !!"

Pozdrowienia

Witam

 

Dziękuję za odpowiedź. Zgadza się, ale problem polega na tym, że na końcu mojego makra nie chcę zamykać Excela. Chcę, żeby pozostał otwarty.

 

Pozdrowienia

Próbowałem dodać na końcu mojego makra:

Ustaw xlSheet = nic

Ustaw xlWB = nic

Ustaw xlApp = nic

Ale nic nie pomaga.

Czy możemy zwolnić zasób programu Excel bez zamykania programu Excel?

 

Z góry dziękujemy,

Jeśli ponownie uruchomisz makro i nadal znajduje się ono w tym samym pliku, nie będzie mogło dwukrotnie utworzyć strony "ZESTAWY", "CZĘŚCI MECHANICZNE" i "ARTYKUŁY KOMERCYJNE"

 

Umieść warunek, jeśli strona nie istnieje, zostanie utworzona.

Twoje makro wypełnia plik Excela za każdym razem, gdy klikniesz po otwartym złożeniu, tworzysz/otwierasz nowy plik Excela za każdym razem, gdy przechowujesz wszystkie informacje w jednym pliku?

Tworzę plik Excela za każdym razem, gdy uruchamiam makro.

Wiem, że jest to problem z niewydanym zasobem programu Excel. Próbowałem zamknąć plik Excela za pomocą programu Excel, gdy makro jest zakończone, i ponownie uruchomić makro, ale nadal mam ten sam problem.

Czy istnieje test, który pozwala dowiedzieć się, czy zasób jest zwolniony, a jeśli nie, z jego zwolnienia?

Spróbuj z:

Set xlWorkBook = Nothing

Set xlFeuilEnse = Nothing

Set xlFeuilMeca = Nothing 

Set xlFeuilComm = Nothing

 

Musisz zresetować wszystko, co zdefiniujesz powyżej.

Musisz zajrzeć do procesów, po zamknięciu Excela przejdź do menedżera zadań (Ctrl + SHIFT + Esc) -> Proces    i sprawdź, czy nie ma EXCEL.EXE

Próbowałem tego już wcześniej.

Umieściłem go na końcu mojego makro... Ale to nie działa.

Próbowałem zadeklarować moją aplikację Excela jako nową aplikację Excel, ale też nie działa:

Dim xlApplication jako nowy Excel.Application

Mam proces Excela, który jest obecny. I myślałem, że proces się zatrzymał , gdy ręcznie zamknąłem Excela, ale najwyraźniej nie. 

Może to mój dodatek jest zły?

Ustaw arkusz xlMeca = xlApplication.Sheets.Add(After:=Arkusze(Arkusze.Count))
Set xlSheetComm = xlApplication.Sheets.Add(After:=Worksheets(Worksheets.Count))

Witam

 

Ja też miałem ten problem wcześniej.

Jedynym rozwiązaniem, jakie do tej pory znalazłem, jest zabicie procesu Excela na końcu przetwarzania.

W przeciwnym razie jest jakby zagubiony między dwoma obecnymi procesami Excela i nie wie, w którym z nich uruchomić, i obojętnie przyjmuje dobre lub złe.

Jedyne wytłumaczenie, jakie znalazłem u moich kilku znajomych z VB.

Pozdrowienia

 

A. Mendes

 

 

 

To zależy od tego, jak zadeklarowane są zmienne:

Słońce xlLeafMeca Jako ...

Dim xlSheetComm As ...

Czy poszedłeś, aby zobaczyć przedostatni post z linkiem, w którym umieściłeś mandragorę, znajdziesz kilka przydatnych informacji ...

Możesz również przejść i zobaczyć TUTAJ, jest wiele informacji na temat metody, którą należy zastosować.

Pozdrowienia

Są one deklarowane w następujący sposób:

Dim xlFeuilMeca                                             As Excel.Worksheet
Dim xlFeuilComm                                             As Excel.Worksheet
Dim xlFeuilEnse                                             As Excel.Worksheet

Zmieniłem sposób, w jaki tworzę moje arkusze, w następujący sposób:

    xlApplication.Sheets.Add
    xlApplication.Sheets.Add
    Set xlFeuilEnse = xlApplication.ActiveSheet
    xlFeuilEnse.Name = "ENSEMBLES"
    Set xlFeuilMeca = xlApplication.Sheets(2)
    xlFeuilMeca.Name = "PIECES MECANIQUES"
    Set xlFeuilComm = xlApplication.Sheets(3)
    xlFeuilComm.Name = "ELEMENTS DU COMMERCE"

 

Nie mam już błędu w tym miejscu, ale mam jeden dotyczący formatowania mojego arkusza kalkulacyjnego w tym wierszu:

xlFeuilMeca.ListObjects.Add(xlSrcRange, Range(xlFeuilMeca.Cells(5, 1), xlFeuilMeca.Cells(i - 1, 7)), , xlYes).Name = "Tableau1"

 

Biorąc pod uwagę, że problem polega na tym, że podczas formatowania i tego, że mój excel jest poprawnie wypełniony, powiemy, że ten problem jest "akceptowalny"...

Myślę, że znalazłem problem: moją NIECIERPLIWOŚĆ

Najwyraźniej zbyt szybko restartowałem makro, co nie pozostawiało czasu na zatrzymanie procesu.