SolidWorks API Community

Unofficial User Site

トピック: コードの書き方について

コードの書き方について 12 年 3 ヶ月 前 #4

  • MS3
  • MS3 さんのアバター
  • オフライン
  • フレッシュボーダー
  • 投稿数: 3
  • カルマ: 0
VBAの初心者ですが、よろしく、お願いいたします。
下記のような動作を行いたいのですが、
コードの書き方を助言して頂けないでしょうか。

1.ユーザー定義の情報全てをエクセルのセルに取得したい。
  また、エクセルからユーザー定義の情報を変更したい。
2.部品表の情報全てをエクセルのセルに取得したい。
  また、エクセルからユーザー定義の情報を変更したい。

ヘルプに記載されているコードを試しているのですが、
なかなか実行されません。
多分、書き方が悪いのだと思います。

このような質問ですが、
よろしく、お願いいたします。
ゲストの書き込みは許可されていません。

Re: コードの書き方について 12 年 3 ヶ月 前 #5

  • hisa
  • hisa さんのアバター
  • オフライン
  • 管理者
  • 投稿数: 12
  • 感謝を受け取りました 7
  • カルマ: 0
MS3さん、はじめまして。

初の書き込み有難う御座います♪
どこが分からないかが分からないのですが、初の書き込みなのでサービスしちゃいます(笑)

1.に関して、サンプルをダウンロードの項目にアップしました。
ユーザー定義プロパティ取得・設定サンプル
Excelから実行する形となっています。ダウンロードしてご確認下さい。

2.関しては別途回答します。


取り急ぎ。
最終編集: 12 年 3 ヶ月 前 : hisa.
ゲストの書き込みは許可されていません。
次のユーザが感謝しました: MS3

Re: コードの書き方について 12 年 3 ヶ月 前 #6

  • MS3
  • MS3 さんのアバター
  • オフライン
  • フレッシュボーダー
  • 投稿数: 3
  • カルマ: 0
hisaさん、ご返信ありがとうございます。

本当に大サービスで、本当にありがとうございます。

頂いたモジュールを理解できるように勉強して、
改めて質問したい内容を整理したいと思います。(分かりづらい質問で申し訳ありませんでした)

お時間を頂いて、ありがとうございます。
よろしく、お願いいたします。
ゲストの書き込みは許可されていません。

Re: コードの書き方について 12 年 3 ヶ月 前 #7

  • hisa
  • hisa さんのアバター
  • オフライン
  • 管理者
  • 投稿数: 12
  • 感謝を受け取りました 7
  • カルマ: 0
ちなみに2に関してですが、部品表を右クリックして指定保存をすることでExcelファイルとしてエクスポートすることが標準機能にありますが、プログラムで行いたいと言うことで良いですか?
ゲストの書き込みは許可されていません。
次のユーザが感謝しました: MS3

Re: コードの書き方について 12 年 3 ヶ月 前 #8

  • MS3
  • MS3 さんのアバター
  • オフライン
  • フレッシュボーダー
  • 投稿数: 3
  • カルマ: 0
はい。2番についてもプログラムで考えていました。

アセンブリファイルの部品表をエクセルファイルに取得したいと思います。

よろしく、お願いいたします。
ゲストの書き込みは許可されていません。

Re: コードの書き方について 12 年 2 ヶ月 前 #9

  • hisa
  • hisa さんのアバター
  • オフライン
  • 管理者
  • 投稿数: 12
  • 感謝を受け取りました 7
  • カルマ: 0
MS3さん、こんにちは :)

遅くなりましたが、2に関するサンプルコードを作ってみました。
Option Explicit

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swFeat As SldWorks.Feature
    Dim swSubFeat As SldWorks.Feature
    Dim swBomFeat As SldWorks.BomFeature
    Dim vBomTable As Variant
    Dim swBomTable As SldWorks.BomTableAnnotation
    
    Dim xlApp As Excel.Application
    Dim xlWb As Excel.Workbook
    Dim xlWs As Excel.Worksheet
    
    Dim i As Long, j As Long, k As Long
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    Set swFeat = swModel.FirstFeature
        
    ' フィーチャー巡回
    While Not (swFeat Is Nothing)
        ' アセンブリの部品表は、テーブルフォルダのサブフィーチャーになります。
        Set swSubFeat = swFeat.GetFirstSubFeature
        While Not (swSubFeat Is Nothing)
            ' フィーチャーの種類が部品表であれば取得
            If swSubFeat.GetTypeName2 = "BomFeat" Then
                Debug.Print swSubFeat.Name
                Set swBomFeat = swSubFeat.GetSpecificFeature2
                If Not (swBomFeat Is Nothing) Then
                    ' 部品表巡回
                    vBomTable = swBomFeat.GetTableAnnotations
                    ' Excel起動
                    Set xlApp = CreateObject("Excel.Application")
                    xlApp.Visible = True
                    xlApp.UserControl = True
                    ' ブックを開く
                    Set xlWb = xlApp.Workbooks.Open("C:\Sample.xls")
                    If Not xlWb Is Nothing Then
                        ' 一番目のシート取得
                        Set xlWs = xlWb.Worksheets(1)
                        ' 部品表内セル巡回
                        For i = 0 To UBound(vBomTable)
                            Set swBomTable = vBomTable(i)
                            For j = 0 To swBomTable.RowCount
                                For k = 0 To swBomTable.ColumnCount
                                    ' Excelブックに出力
                                    xlWs.Cells(j + 1, k + 1).Value = swBomTable.Text(j, k)
                                Next k
                            Next j
                        Next i
                    End If
                End If
            End If
            Set swSubFeat = swSubFeat.GetNextSubFeature
        Wend
        Set swFeat = swFeat.GetNextFeature
    Wend
    
End Sub

SolidWorksで新規マクロを作成して、上記コードを貼り付けて下さい。
その際、VBA編集画面の"ツール"→"参照設定"から、"Microsoft Excel XX.X Object Library"のチェックをして下さい。
(Excelを制御するためのライブラリ参照です)
その上で、CドライブにSample.xlsというファイルを作ってSolidWorksのマクロを実行すると、Sample.xlsのSheet1に現在開いているアセンブリ部品表の内容を出力します。

例外(エラー)処理などは一切していないので、必要に応じて追加してみて下さい ;)
最終編集: 12 年 2 ヶ月 前 : hisa.
ゲストの書き込みは許可されていません。
ページ作成時間: 0.064 秒
現在地: Home フォーラム SolidWorks API FAQ SolidWorks VBA FAQ コードの書き方について