Export van Solidworks BOM door VB

Hoi allemaal!

Ik heb een kleine macro op de Solidworks API om de stuklijst van een open tekening te exporteren naar Excel in . CSV-bestand

Wat ik graag zou willen, is dat dit Excel-bestand een vaste naam heeft en elke keer dat ik mijn macro uitvoer, komt de geëxporteerde BOM-tabel van Solidworks net onder de andere te schrijven. Ik weet niet genoeg over de code die ik heb gekregen, wat het momenteel doet is het maken van een enkele array. Ik kan de instructie "schrijf pas vanaf het moment dat het leeg is" niet opnemen, alleen maar om mijn nomenclaturen die elkaar opvolgen terwijl ik de macro op mijn verschillende vlakken uitvoer.

Als iemand een regel code heeft die me zou helpen, ben ik er helemaal voor!

Fijne dag.

 


20158271458773_export_bom.swp
1 like

Hallo

Als we bijvoorbeeld in een CSV-bestand de puntkomma als scheidingsteken gebruiken en we willen de letters A, B en de variabele C op de eerste regel schrijven en de letters D, F en de variabele F op de eerste regel , moeten we schrijven:

f = VrijBestand
Open "C:\TEST.csv" om toe te voegen als #f
Print #f, "A; B; " & C
Print #f, "E; F; " & G

Sluit #f
 

Met een concreet voorbeeld (uit de implementatie van bijlagen in ons ERP):

f = VrijBestand

Open "\\dimecox3\PLANBE$\Import_plans.csv" voor Toevoegen als #f het openen van een CSV- of TXT-bestand
    Schrijven naar het eigenschappenbestand
                Gedrukt #f, "ITG; 2; " & CODE & ";; 001; " & docNamePDF & "; " & "PDF"
                Gedrukt #f, "ITG; 2; " & CODE & ";; 002; " & docNameDWG & "; " & "DWG"
Sluit #f

2 likes

Au! Ik heb niet het gevoel dat het de oplossing voor mijn probleem is, ik ben een beetje verdwaald... Heb je de code als bijlage geopend om het resultaat te zien (je hebt een tekening met een stuklijst   nodig om het te laten werken).

Macro werkt heel goed! maar ik wil gewoon dat bij elke RUN van de macro, de nomenclatuur die actief is in solidworks begint op hetzelfde csv-bestand, maar hieronder verschijnt wat er mogelijk is geschreven. Op deze manier zou ik, door mijn plannen door te nemen en de macro uit te voeren, eindigen met een excel die al mijn onderdelen globaliseert.

Het is duidelijk dat ik slecht ben, ik ben net begonnen! Ik ben een cartoonist, en ik ontdek de kracht van deze API's:)

 

1 like

Mijn antwoord beantwoordt dit probleem goed, maar ik heb het SWP-bestand niet geopend omdat ik SolidWorks niet bij de hand heb.

Kunt u de macro posten in een tekstbestand of direct in een antwoord alstublieft?

1 like

Sub ProcesBomFeature(swBomFeat als SldWorks.BomFeature)

    Dim vTableArr als variant
    Dim vTable als variant
    Dim swTable als SldWorks.TableAnnotation
    Dim swAnn As SldWorks.Annotatie
    Dim nNumCol zo lang
    Dim nNumRow zo lang
    Dim sRowStr als snaar
    Zon i Zo lang
    Zon j Zo lang
    
    'Annotatietabellen ophalen
    vTableArr = swBomFeat.GetTableAnnotations
    
    'Annotatietabellen doorkruisen
    Voor elke vTable in vTableArr
    
        'Een tafel ophalen
        Stel swTable in = vTable

 'Herstel van inhoud
        Stel swAnn = swTable.GetAnnotation in
    
        "Aantal kolommen en rijen
        nNumCol = swTable.ColumnCount
        nNumRow = swTable.RowCount
    
        "Naam en type van de tabel
        Debug.Print "    Tabel : " & swAnn.GetName & " Type : " & swTable.Type
    
        "Traject van de lijnen
        Voor i = 0 Naar nNumRow - 1
    
            sRowStr = "      "
    
            'Kolom route
            Voor j = 0 Naar nNumCol - 1
            
                sRowStr = sRowStr & swTable.Text(i, j) & " | "
                
            Volgende j
            
        ' Inhoud weergeven
        Debug.Print Links (sRowStr, Lin (sRowStr) - 1)
    
        volgende i
        


        'Map afsluiten
        Dim xlsPath als snaar
        xlsPath = Mid(swModel.GetPathName, 1, InStrRev(swModel.GetPathName, "\"))
        
        "Naam van de XLS
        Dim xlsName Als String
        Als InStrRev(swModel.GetTitle, ".") > 0 Dan
            xlsName = Mid(swModel.GetTitle, 1, InStrRev(swModel.GetTitle, ".") - 1) & ".csv"
        Anders
            xlsName = swModel.GetTitle & ".csv"
        Einde als
        
        Debug.Print "Uitvoer: " & xlsPath & xlsName
        
        Excel exporteren
        swTable.SaveAsText xlsPath & xlsName, "; "
        
    Volgende vTable
    
    MsgBox "Export voltooid"

Einde Sub

 

Dus dit stuk werkt nikel als ik maar een nomenclatuur had om te exporteren. De; zoals scheiders hun werk doen en alles.

Dus dat is wat ik dacht: de gebruikte SaveAsText-functie staat je niet toe om regels toe te voegen, als het bestand al bestaat is het overschreven: 


Als een bestand met de opgegeven naam in het opgegeven pad...   Bestaat    

Dan is het...  Overschreven

Bron: http://goo.gl/odfZb9

Het is noodzakelijk om de oplossing door te nemen die in mijn eerste bericht werd voorgesteld.

 
1 like

Een grote dank aan u .PL!!

1 like

Graag. Als u uw macro kunt plaatsen met de code aangepast voor mensen die hetzelfde probleem hebben, en in een tekstbestand, nog beter!

1 like