Odczytywanie zamkniętego programu Excel z SolidWorks w języku VBA (SW 2016)

Witam

Chciałbym wypełnić listę ComboBox programem Excel bez otwierania danego programu Excel (mój ComboBox znajduje się w makrze SolidWorks).

Muszę więc być w stanie odczytywać komórki z SolidWorks w zamkniętym Excelu.

 

W programie Excel, aby odczytać komórkę w innym zamkniętym programie Excel, używany jest następujący kod VBA :

'Lecture de la cellule A1 dans la Feuil1 du classeur fermé				

Kiedy próbuję użyć tego kodu w SolidWorks, otrzymuję błąd kompilacji , który mówi, że funkcja ExecuteExcel4Macri nie jest zdefiniowana.

 

Ktoś ma rozwiązanie?       Z góry dziękuję za pomoc.

Zobacz ten link 

https://www.developpez.net/forums/d1388072/logiciels/microsoft-office/excel/macros-vba-excel/macro-copier-plage-d-fichier-excel-ferme/

@+

3 polubienia

Witam

Myślę, że jak wyjaśniono w linku podanym przez gt22, łatwiej będzie Ci pracować na otwartym pliku Excel. Możesz otworzyć ten plik Excela, manipulować nim, zapisać go, a następnie zamknąć go programowo w swoim makrze bez wyświetlania okna Excela, a więc w sposób przejrzysty dla użytkownika.

Pozdrowienia

2 polubienia

Przede wszystkim musisz zapisać docelowy plik Excela

To było bardzo proste... Otrzymuję pełną ścieżkę za pomocą ActiveWorkbook.Path i teraz działa bez zarzutu... Jedynym warunkiem jest to, że moje pliki źródłowe znajdują się w tym samym folderze lub podfolderze skoroszytu... Nic wielkiego... Jeszcze raz dziękujemy! Głupio straciłem kilka dni

w tym samym folderze lub podfolderze , aby linki działały dobrze

z tego co zrozumiałem ;-(

@+

1 polubienie

Jeśli naprawdę chcesz to zrobić na zamkniętym Excelu, zobacz: http://silkyroad.developpez.com/VBA/ClasseursFermes/ ale wydaje się, że istnieje wiele ograniczeń co do możliwości ...

2 polubienia

Czy przypadkiem nie przegapisz odwołań do Microsoft.Interop.Office i Microsoft.Interop.Excel?

Jeśli te odwołania nie są włączone, nie można użyć funkcji ExecuteExcel4Macro(), ponieważ nie istnieje ona w żadnym zestawie, do którego istnieje odwołanie.

3 polubienia

 Dziękuję Yves.T,

Brakowało mi odwołania "Biblioteka obiektów Microsoft Excel XX.X".

Skąd wiemy, które referencje są potrzebne dla którego kodu?

 

W przeciwnym razie, aby zasilić mój Combobox, użyłem następującego kodu: 

Private Sub UserForm_Initialize()
Dim i As Byte
Dim e As String

i = 1
Do
    ComboBox1.AddItem ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")
    i = i + 1
    e = ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")

Loop While Len(e) > 1

End Sub

Czy uważasz, że możemy stworzyć prostszy kod?

Dlaczego nie użyć "ComboBox1.RowSource", którego nie mogłem połączyć z ExecuteExcel4Macro()?

To nie jest skomplikowane:

Jeśli używasz utworzonej przez siebie procedury lub funkcji, nie ma odwołania do dodania.

W przypadku korzystania z procedury lub funkcji , która nie została utworzona przez użytkownika, należy dodać odwołanie.

Naciśnięcie F1, gdy kursor znajduje się na instrukcji, powoduje otwarcie pomocy dotyczącej tej funkcji/procedury. Jego montaż jest wskazany w pomocy.

Mówiąc bardziej ogólnie, jeśli musisz korzystać z programu Excel, potrzebujesz odwołania do pakietu Office (który zawiera podstawowe obiekty dla aplikacji pakietu Office) oraz odwołania do programu Excel (aby mieć dostęp do określonych obiektów, procedur i funkcji programu Excel)

Jeśli używasz programu Word, potrzebujesz odwołania do pakietu Office i programu Word.

Aby uprościć makro, z wyjątkiem sytuacji, gdy można przekazać zakres jako parametr do funkcji ExecuteExcel4Macro() , powinna ona zwrócić tablicę ciągów. Wszystko, co pozostaje do zrobienia, to powiązać tablicę z właściwością RowSource listy rozwijanej. (Aby sprawdzić, czy wartość zwrócona przez makro jest rzeczywiście tablicą ciągów, jeśli nie, przekonwertuj ją)

Można to również zrobić tak, jak w linku zaproponowanym przez d.roger.

Używanie ADO do tego celu jest trochę jak użycie broni nuklearnej do zabicia komara, ale w dużej mierze można to zrobić. (o ile rozumiemy zasadę ODA)

Najprościej rzecz ujmując, ADO to zestaw narzędzi, które umożliwiają dostęp do danych, niezależnie od tego, czy jest to baza danych SQL lub Access, plik Excel itp.

Wykorzystuje silnik bazy danych, zapytania SQL i wskaźnik do pobierania danych. Otwieramy połączenie określając silnik bazy danych, który ma być używany oraz plik, zadajemy pytanie do silnika bazy danych (zapytanie SQL) i przeglądamy wynik zapytania za pomocą wskaźnika.

2 polubienia

OK dziękuję za te informacje Yves.T,

W przypadku metody ADO chciałem uniknąć używania następującej metody: nieodpowiedniej metody (zbyt potężnej dla prostej rzeczy, którą chcę zrobić).

Więc pozostanę przy funkcji ExecuteExcel4Macro() .