[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/05/11(Wed) 13:34
投稿者名:maruo
Eメール:
URL :
タイトル:
制御方法について
はじめまして、
現在、下のプログラムでAutoCADの連続印刷をしています。
選択した複数の図面をリストボックスに代入して順番に処理
する様になっています。部数が1部の時はいいのですが
複部数になるとちょっと問題があるのです。
下の文だと
For i = 1 To Val(Text0.Text) テキストボックスに数値(例:3)
を入れたとします。すると同じ図面が3枚重なってでてきます。
私の所は、A1用紙を出図するのが多いのですが、いつも並べ替えを
してる有様です。時間が非常にかかります。
それを、解消したいのです。
1〜5迄の図面を例えば3部 1.2.3.4.5/1.2.3.4.5/1.2.3.4.5
の様に後で並び替えをせずに出図するにはどうすればいいのでしょうか?
ご教授おねがいいたします。
-----------------------------------------------------------------------------------
   'リスト内のDWGファイルの数
    i = DwgList.listcount
    'リストの数だけ繰り返し
    For j = 0 to i -1
    'DWGファイル名
         importfile = DwgList.List(j)
        'リストボックスの図面をオープン
        Set acadDoc = acadApp.Documents.Open(importfile)
        '印刷実行
        If CheckBox1.Value = vbChecked And Val(Text0.Text) = 1 Then
        構文
        End If
        If CheckBox1.Value = vbChecked And Val(Text0.Text) > 1 Then
        For i = 1 To Val(Text0.Text)
        構文
        Next
        End If
-----------------------------------------------------------------------------------

        中略

        Next
-----------------------------------------------------------------------------------

投稿時間:2005/05/11(Wed) 13:41
投稿者名:ぶぶ
Eメール:
URL :
タイトル:
Re: 制御方法について
こういうことでしょうか?
勘違いだったらごめんなさい
' 指定部数分繰り返す
For k = 1 To Val(Text0.Text) テキストボックスに数値(例:3)

    'リスト内のDWGファイルの数
     i = DwgList.listcount
     'リストの数だけ繰り返し
     For j = 0 to i -1
     'DWGファイル名
          importfile = DwgList.List(j)
         'リストボックスの図面をオープン
         Set acadDoc = acadApp.Documents.Open(importfile)
         '印刷実行
         If CheckBox1.Value = vbChecked  Then
         構文
         End If
     next j
next k

印刷する処理を出したい部数分繰り返すって感じでしょうか?

投稿時間:2005/05/11(Wed) 13:56
投稿者名:maruo
Eメール:
URL :
タイトル:
Re^2: 制御方法について
ぶぶ様、早速の返事有難うございます。
私が文章でうまく説明できなくてすみません。
えーっとですね。
例えば、10枚の図面を3部出したいとします。今のままですと1枚目の図面が3枚続けて出てきます。
2枚目以降も3枚ずつ続けて出てきます。10枚目までこの状態ですので、
1枚目×3.2枚目×3.3枚目×3....計30枚 これですと出図後順番に並び換えなくてはなりません

これを、1〜10枚順番通り×3部 並び換えを不要にしたいのです。下手な説明ですみません。
わかっていただけたでしょうか?宜しくおねがいいたします。

投稿時間:2005/05/11(Wed) 14:08
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 制御方法について
> わかっていただけたでしょうか?宜しくおねがいいたします。

解っていないのは、貴方のようですよ、ぶぶさんは、1部づつの印刷を3回繰り返せと
おっしゃっているのですが?

即ち、1部だけの印刷をすれば、1ページから10ページまで順番に印刷されますよね
それを部数分(3回)繰り返せばどうなりますか?

回答して頂いたコードを試してみましたか?

投稿時間:2005/05/11(Wed) 15:26
投稿者名:maruo
Eメール:
URL :
タイトル:
Re^4: 制御方法について
ぶぶ様、花ちゃん様 大変失礼いたしました。
コードをぶぶ様の指示通りに直しました。うまく印刷されました。有難うございます。
しかし、印刷は出来ましたがAutoCADが以前の様にクローズして終わってくれません。
今、いろいろやってみたのですがちょっと変な動きをします。自分なりにやってみて
またご報告いたします。

投稿時間:2005/05/11(Wed) 20:09
投稿者名:maruo
Eメール:
URL :
タイトル:
Re^5: 制御方法について
こんばんは、またやって参りました。
ぶぶ様に教えて頂いたようにやりました。
とりあえず、前回は一つずつ解決しようと構文の一部を投稿させて頂きました。
今回は、印刷ボタンを押してAutoCADが起動して一連の印刷処理を
する所を投稿させていただきます。
ちょっと長いですが下の構文で実行すると
AutoCADが正常に終わりません。ほんとでしたらAutoCADが閉じて
印刷終了のメッセージが出るはずなのですが.....
どこがおかしのでしょうか?
宜しく、お願い致します。

-----------------------------------------------------------
'「印刷」ボタンを押した時
Private Sub GoUp_Click()
    Dim CurPath As String, importfile As String
    Dim acadApp As AcadApplication
    Dim acadDoc As AcadDocument
    Dim insertPoint(0 To 2) As Double
    Dim scaleFactor As Double
    Dim namelen As Long
    Dim i As Integer, j As Integer
    Dim comstr As String
    Dim booSclFit As Boolean
    Dim acadDocs As AcadDocuments
   '
    On Error Resume Next
    Set objPlot = ThisDrawing.Plot
    'AutoCADアプリケーションオブジェクトを取得
    Set acadApp = GetObject(, "AutoCAD.Application.16")
    'AutoCADアプリケーションオブジェクト取得に失敗した時
    If Err Then
        'AutoCAD 2004を起動
         Set acadApp = CreateObject("AutoCAD.Application.16")
        'AutoCADを表示
         acadApp.Visible = True
        'Acad2004を最大化
         acadApp.WindowState = AcWindowState.acMax
        'アプリを最小化
         WindowState = 1
     'エラーオブジェクトをクリア
        Err.Clear
    End If
----------本日投稿した所----------

    '印刷部数を繰り返す
        For k = 1 To Val(Text0.Text)←教えて頂いた所
        
    'リスト内のDWGファイルの数
    i = DwgList.listcount
    'リストの数だけ繰り返し
    For j = 0 To i - 1
    'DWGファイル名
         importfile = DwgList.List(j)
        'リストボックスの図面をオープン
         Set acadDoc = acadApp.Documents.Open(importfile)
        '印刷実行
        '(レーザープリンタA3の場合)
        If CheckBox1.Value = vbChecked And Val(Text0.Text) = 1 Then
        印刷処理
        End If
        If CheckBox1.Value = vbChecked And Val(Text0.Text) > 1 Then
        For i = 1 To Val(Text0.Text)
        印刷処理
        End If
        
        Next j ←教えて頂いた所
        Next k←教えて頂いた所
        
----------ここまで----------

上記を真似て書き換えてみました。

    '印刷部数を繰り返す
        For k = 1 To Val(Text1.Text)
        
    'リスト内のDWGファイルの数
    i = DwgList.listcount
    'リストの数だけ繰り返し
    For j = i - 1 To 0 Step -1 ←これは逆にソートします。
    'DWGファイル名
         importfile = DwgList.List(j)
        'リストボックスの図面をオープン
         Set acadDoc = acadApp.Documents.Open(importfile)
        '印刷実行
        '(プロッタA1の場合)
        If CheckBox2.Value = vbChecked And Val(Text1.Text) = 1 Then
        印刷処理
        End If
        If CheckBox2.Value = vbChecked And Val(Text1.Text) > 1 Then
        For i = 1 To Val(Text1.Text)
        印刷処理
        End If
        Next j
        Next k
        
   略
        '(プロッタA2の場合)
        上記A1の場合と同じ
        '(プロッタA3の場合)
    上記A1の場合と同じ
   
       'ファイルを閉じる
        acadDoc.Close (False)
        ’Next ←これは不要になりました。
       'ACAD終了
        acadApp.Quit
        ' アプリケーションオブジェクトの解放
        Set acadApp = Nothing
    '変換終了のメッセージを表示
    '65584=65536(メッセージボックスを前面)+48(注意メッセージアイコン)
    MsgBox "印刷終了!", 65584, "End of Plot"
    'アプリの最大化
    WindowState = 0
       End Sub
-------------------------------------------------------------------

投稿時間:2005/05/11(Wed) 20:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^6: 制御方法について
バグ取りはプログラマーの基本です、次回から自分で調べるようにしましょう。
その上でその箇所等の修正方法等が解らない場合質問するようにしましょう。
(今回の場合質問ではなく、修正依頼ですよね)

>     On Error Resume Next
>         Err.Clear

まともに動くようになるまでは上記のエラー処理はコメント化しておきましょう。
エラーが発生していても解らないでしょう。
又、F8 キー を押して起動してどのように動作しているか確認等して見てください。
場合によっては怪しそうな部分をコメントにして確認すればどこが悪いのか解るはず。
(極端な話、AutoCAD をオープンして閉じるだけにして試すから順次増やしていけば)

投稿時間:2005/05/12(Thu) 08:45
投稿者名:ぶぶ
Eメール:
URL :
タイトル:
Re^6: 制御方法について
気になった点をひとつ
> 上記を真似て書き換えてみました。
>
>     '印刷部数を繰り返す
>         For k = 1 To Val(Text1.Text)
>        
>     'リスト内のDWGファイルの数
>     i = DwgList.listcount
>     'リストの数だけ繰り返し
>     For j = i - 1 To 0 Step -1 ←これは逆にソートします。
>     'DWGファイル名
>          importfile = DwgList.List(j)
>         'リストボックスの図面をオープン
>          Set acadDoc = acadApp.Documents.Open(importfile)
>         '印刷実行
>         '(プロッタA1の場合)
>         If CheckBox2.Value = vbChecked And Val(Text1.Text) = 1 Then
>         印刷処理
>         End If
>         If CheckBox2.Value = vbChecked And Val(Text1.Text) > 1 Then
>         For i = 1 To Val(Text1.Text)
>         印刷処理
>         End If
   ↑ここは部数分繰り返すループが上位にあるので、単に vbChecked だったら印刷処理
     でいけると思います。
>         Next j
>         Next k

    後は花ちゃんさんが言われるようにデバッグしてみてくださいね。
    AutoCadないので、同じような環境でテストしていませんが、
    がんばってください。(^-^)/

投稿時間:2005/05/13(Fri) 07:45
投稿者名:maruo
Eメール:
URL :
タイトル:
Re^7: 制御方法について
ぶぶ様、花ちゃん様 有難うございました。
何とか無事に出来上がりました。まだ改良の余地はありますが
自分なりに勉強して頑張りたいとおもいます。