Rozszerzenie pliku Odzyskaj wartość

 Witam wszystkich.
Mam mały poziom w VBA. Dostałem  kod, który zmodyfikowałem zgodnie z Twoimi radami na tym forum.
Począwszy od złożenia, umożliwia eksport listy materiałów do arkusza .xls
Działa to idealnie, ale chciałbym dodać możliwość pobrania rozszerzenia plików w kolumnie: J. 
Zmienna, która pozwala na pobranie rozszerzenia , jest następująca: Right(docfilename , 6)
Jak zintegrować  tę zmienną z moim programem?

 

Sub main()

Dim xlApp As Excel.Application
Ustaw xlApp = Nowy Excel.Aplikacja
Dim wbk As Excel.Workbook
Dim sht As Excel.Arkusz roboczy

Z xlApp
    . Widoczne = Prawda
    Ustaw wbk = . Skoroszyty.Dodaj
    Ustaw sht = wbk. Arkusz ActiveSheet
Zakończ się na

Dim swApp                   jako SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swBOMAnnotation         As SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim boolstatus              As Boolean
Dim BomType                 tak długo, jak długo
Przyciemnij konfigurację           jako ciąg
Dim TemplateName            As Ciąg

Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Ustaw swModelDocExt = swModel.Extension

TemplateName = "M:\DATABASE\SZABLONY\05-Model nomenklatury\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Konfiguracja = swApp.GetActiveConfigurationName(swModel.GetPathName)
Konfiguracja MsgBox
Ustaw swBOMAnnotation = swModelDocExt.InsertBomTable3(NazwaSzablonu, 0, 0, TypFormularza, Konfiguracja, Fałsz, swNumberingType_Detailed, Prawda)
Ustaw swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 Prawda

Dim NumCol tak długo
Dim NumRow tak długo
Dim I tak długo
Słońce J Tak długo

LiczbaKolumn = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount

Dla I = 0 do NumRow
    Dla J = 0 TB NumCol
        Arkuszy. Komórki(I + 1, J + 1). Wartość = swBOMAnnotation.Text(I, J)
    Następny J
Dalej I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, Prawda, 0, Nic, 0)
swModel.EditDelete

Przyciemnij ścieżkę jako ciąg
path = "C:\temp\BOS.xlsx"

Z xlApp
    WBK. Zapisz jako ścieżkę
    WBK. Zamykać
    . Kończyć
Zakończ się na

Koniec subwoofera

Witam

Powinien zostać wyświetlony następujący fragment kodu pomocy interfejsu API: http://help.solidworks.com/2019/english/api/sldworksapi/Get_Components_in_Each_BOM_Table_Row_VB.htm

 

 

Jeśli dobrze rozumiem, twój program tworzy nomenklaturę, a następnie przechodzi przez nią, aby pobrać zawartość.

Powinieneś mieć zrzut ekranu swojej nomenklatury (listy kolumn).

Osobiście dodam kolumnę w BOM, która pobiera pełną nazwę pliku.
Mamy wtedy 2 możliwości:
- Potraktuj komórkę za pomocą VBA;
- Korzystaj z funkcji XL.

W VBA wykonujesz drugą pętlę z czymś takim:
Arkuszy. Komórki(I + 1, colonne_nom_fichier). Wartość = Prawo( sht. Komórki(I + 1, colonne_nom_fichier). Wartość, 6)

Pomysł dodania kolumny w BOM, która pobiera pełną nazwę pliku, jest dobry.

Niestety, SolidWorks nie zawiera opcji pobrania nazwy pliku i rozszerzenia.

Ponieważ możliwe jest kliknięcie prawym przyciskiem myszy, aby otworzyć plik wiersza zestawienia komponentów, być może można odzyskać nazwę w ten sposób (symulując otwór)?

Obrazek jest nieczytelny (na tym polega problem z tym forum), trzeba go załączyć.

Komputerów


capture.jpg

Witam

Link, który umieściłem, pozwala na zapętlenie BOM w celu pobrania pełnej ścieżki (z rozszerzeniem).

Cyryl. Dziękuję za linki. Nie mogę uruchomić tego programu, wyświetla komunikat o błędzie w 7 wierszu.

Jak udało Ci się go przetestować? Myślę, że się nie pomyliłem, ale nie mogę rozgryźć co :/ 

Witam

Po prostu wrzuciłem plan zawierający nomenklaturę. Gdzie to sadzi? (7. linijka, nie jestem pewien, czy mam właściwą)

W moim przypadku nic się nie dzieje :O

Czy mógłbyś zrobić zrzut ekranu z uzyskanymi wynikami ?

 

-----------------------------------

Warunki wstępne:
" 1. Otwórz public_documents \samples\tutorial\assemblyvisual\food_processor.sldasm.
'2. Wykonaj rysunek ze złożenia.
"3. Wybierz opcję Wstaw> Tabele> Lista materiałów .
"4. Upewnij się, że jest zaznaczona opcja Tylko części w typie zestawienia komponentów.
"5. Upewnij się, że opcja Pokaż konfiguracje w tym samym pomieszczeniu jako osobne elementy
" w opcji Grupowanie konfiguracji części jest zaznaczona.
"6.  Kliknij przycisk OK .
'7. Kliknij w dowolnym miejscu rysunku, aby wstawić tabelę zestawienia komponentów.
'
' Warunki końcowe:
"1.Funkcjonalność struktury produktu1 .
"2. Pobiera domyślną konfigurację . 
"3. Przetwarza tabelę BOM dla konfiguracji domyślnej .  
'4. Sprawdź okno Wykonywanie.
'
' UWAGA : Ponieważ szablon jest używany w innym miejscu, nie zapisuj zmian

Witam

W załączeniu zrzut ekranu.


macro_sw_get_coponent_in_bom.jpg

Dziękuję. Wynik znajduje się w części wykonawczej. Jak to zrobić, przejdź do arkusza xls?

Witam

Poniżej znajduje się integracja przykładowego interfejsu API. Nie sprawdziłem, czy zmienna docfilename jest pusta.

Dim vPtArr As Variant
Dim swComp As Object
Dim pt As Object
Dim compPath As String
Dim docfilename As String

Sub main()

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

With xlApp
    .Visible = True
    Set wbk = .Workbooks.Add
    Set sht = wbk.ActiveSheet
End With

Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swBOMAnnotation         As SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim boolstatus              As Boolean
Dim BomType                 As Long
Dim Configuration           As String
Dim TemplateName            As String

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

TemplateName = "M:\DATABASE\MODELES\05-Model de nomenclature\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Configuration = swApp.GetActiveConfigurationName(swModel.GetPathName)
MsgBox Configuration
Set swBOMAnnotation = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True)
Set swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 True

Dim NumCol As Long
Dim NumRow As Long
Dim I As Long
Dim J As Long

NumCol = swBOMAnnotation.ColumnCount
NumRow = swBOMAnnotation.RowCount

For I = 0 To NumRow
    vPtArr = swBOMAnnotation.GetComponents2(I, Configuration)
    If (Not IsEmpty(vPtArr)) Then
        For K = 0 To UBound(vPtArr)
            Set pt = vPtArr(K)
            Set swComp = pt
            If Not swComp Is Nothing Then
                docfilename = swComp.GetPathName
            End If
        Next K
    End If
    For J = 0 To NumCol
        sht.Cells(I + 1, J + 1).Value = swBOMAnnotation.Text(I, J)
    Next J
    If I > 0 Then
        sht.Cells(I + 1, J).Value = Right(docfilename, 6)
    End If
Next I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, True, 0, Nothing, 0)
swModel.EditDelete

Dim chemin As String
chemin = "C:\temp\BOS.xlsx"

With xlApp
    wbk.SaveAs chemin
    wbk.Close
    .Quit
End With

End Sub

 

3 polubienia

Dzięki za kod :)

Mam tylko mały problem z błędem kompilacji Li13, Col 1

Powinieneś zrobić zrzut ekranu z komunikatem o błędzie, ponieważ Li13,Col1 to dla mnie pusta linia.

Errata :) Li 8, kol. 1


capture.jpg

To nie jest linia, w której jest problem, ale tam, gdzie znajduje się kursor.

Więc powiem, że brakuje Dim K tak długo

W przeciwnym razie zajrzyj do referencji (narzędzia > Referencje) i powinno to wyglądać jak na zrzucie ekranu dołączonym do numeru wersji.


references_vba.jpg
1 polubienie

Cyril.f Brawo i dziękuję:D

W rzeczywistości wynikało to z opcji: Biblioteka obiektów programu Microsoft Excel 16.0