Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5004 / 13646 ツリー ←次へ | 前へ→

【53014】1行ずつ印刷のやりかた タクロー 07/12/11(火) 19:00 質問[未読]
【53016】Re:1行ずつ印刷のやりかた タクロー 07/12/11(火) 22:33 発言[未読]
【53017】Re:1行ずつ印刷のやりかた ichinose 07/12/11(火) 23:11 発言[未読]
【53019】Re:1行ずつ印刷のやりかた タクロー 07/12/12(水) 3:27 お礼[未読]
【53020】Re:1行ずつ印刷のやりかた ichinose 07/12/12(水) 8:20 発言[未読]
【53056】Re:1行ずつ印刷のやりかた タクロー 07/12/13(木) 0:19 お礼[未読]
【53161】Re:1行ずつ印刷のやりかた タクロー 07/12/17(月) 22:28 回答[未読]

【53014】1行ずつ印刷のやりかた
質問  タクロー  - 07/12/11(火) 19:00 -

引用なし
パスワード
   PC-PR201シーケンスを利用した印刷制御で、
1行ずつ印刷したいのですが、どのようにしたらよいのでしょうか。
初めて質問します。お願いします。

【53016】Re:1行ずつ印刷のやりかた
発言  タクロー  - 07/12/11(火) 22:33 -

引用なし
パスワード
   自己レスです。
セルにデータを書き込んでから、範囲印刷すればいけそうな気がしてきました。
追加で質問なんですが、「通常使うプリンタ」の現在の設定を調べたり、
別のプリンタを指定したりすることは可能でしょうか?

【53017】Re:1行ずつ印刷のやりかた
発言  ichinose  - 07/12/11(火) 23:11 -

引用なし
パスワード
   ▼タクロー さん:
こんばんは。
>セルにデータを書き込んでから、範囲印刷すればいけそうな気がしてきました。
>追加で質問なんですが、「通常使うプリンタ」の現在の設定を調べたり、
>別のプリンタを指定したりすることは可能でしょうか?

新規ブックの標準モジュールにて、以下のコードで試してみて下さい。

'========================================================
Sub プリンタtest()
  Dim ex As Object
  Dim ans As Variant
  Set ex = CreateObject("excel.application")
  MsgBox "通常使うプリンタ" & ex.ActivePrinter
  ex.Quit
  Set ex = Nothing
  MsgBox "現在設定されてるプリンタ  " & ActivePrinter
  ans = Application.Dialogs(xlDialogPrinterSetup).Show
  If ans = True Then MsgBox "設定プリンタ" & ActivePrinter
End Sub

【53019】Re:1行ずつ印刷のやりかた
お礼  タクロー  - 07/12/12(水) 3:27 -

引用なし
パスワード
   ichinose様ありがとうございます
こんな感じで解決できました。あとは制御コードと格闘してきます。

=======================================================
Application.ActivePrinter = "NEC PC-PR201/40 on LPT1:"
Application.DisplayAlerts = False
Sheet6.Cells(1,1) = "Titles=" & Chr$(14) & "999" & Chr$(15)
Sheet6.PageSetup.PrintArea = "$A$1"
Sheet6.Printout

【53020】Re:1行ずつ印刷のやりかた
発言  ichinose  - 07/12/12(水) 8:20 -

引用なし
パスワード
   ▼タクロー さん:
おはようございます。

>こんな感じで解決できました。あとは制御コードと格闘してきます。

>=======================================================
>Application.ActivePrinter = "NEC PC-PR201/40 on LPT1:"
'本当は、直接プリンタ名をコード内に記述するのは???
'なのですが(プリンタが変わった場合、コードの変更もしなくてはならない)、
'DOS時代の延長なのでしょうね!!201H系のプリンタなんて、もう殆どないものね!!

>Application.DisplayAlerts = False
>Sheet6.Cells(1,1) = "Titles=" & Chr$(14) & "999" & Chr$(15)

私も、DOS時代にはこのような制御コードを良く使っていました。
昔の201H系の制御コードのマニュアルが手元にあったので調べてみたら、
SO、SIコードですね!!
でも、これをExcelで印刷しても拡大されませんよ!!

前にも

www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=18464;id=excel

で同じようなご質問を受けました。
残念ながら、上記のスレッドでリンクしているサイトは消滅してしまいましたが、
201Hのプリンタがぶら下がっているPCって、古い機械なので、滅多なことは
やらないのですが、当時実は試してみました。
結果、ANKの印刷はできましたが、制御コードまでは印刷に反映されませんでした。
よって、自身のコードを投稿するのを止めてしまったのですが・・・。

上記スレッドにあるように

>API(Createfile、Writefile等)

を使っています。
この辺りが参考になればよいのですが・・・。

【53056】Re:1行ずつ印刷のやりかた
お礼  タクロー  - 07/12/13(木) 0:19 -

引用なし
パスワード
   ▼ichinose さん:
>SO、SIコードですね!!
>でも、これをExcelで印刷しても拡大されませんよ!!

マジで印刷できませんか!考え直さないと!
201エミュレーションではなく、本物の201プリンタなのでいけるんじゃないかな?
と安易に考えていました。(今は別のプリンタで実験中ですが、本番は本物です)

>>API(Createfile、Writefile等)
>を使っています。
>この辺りが参考になればよいのですが・・・。

検索してみましたが情報は消えているようでした。
別のサイトより、
www.nagano-it.go.jp/joho/kaisetsu/VBDohjoh/WindowsSP/WindowsSP_4_2.html
このへんを参考にして、"LPT1"をCreateFileでオープンする方法を試してみます。
ただ、バイナリモード専用らしいので、改行(CR+LF)を忘れず入れればいいのかな
がんばります。

【53161】Re:1行ずつ印刷のやりかた
回答  タクロー  - 07/12/17(月) 22:28 -

引用なし
パスワード
   解決の報告です。

OpenとPutを使った方法で解決しました。
終わってみたら少しのコードで済みました。
検索して見た人へのメモとして残しておきます。
1.通常使うプリンタ設定に関係なく制御コードをプリンタへ印刷する
2.送信のみ。インク残量などのデータ受信不可
3.通常文字と拡大文字を1行中に書くときは通常→拡大の順番にする
(修飾文字の解除はエミュレーションされない場合あり)
'==========================================
Sub printertest()
Dim IntFileNo As Integer
IntFileNo = FreeFile
復帰 = Chr$(&HD)
改行 = Chr$(&HA)
拡大指定 = Chr$(&HE)
拡大解除 = Chr$(&HF) '解除されない場合があるので適宜リセットするといい
改ページ = Chr$(&HC)
プリンタリセット = Chr$(&H1B) & "c1"

Open "LPT1" For Binary Access Write As #IntFileNo
Put #IntFileNo, ,"ABCDEF" & 復帰 & 拡大指定 & "===" & 拡大解除
Put #IntFileNo, ,復帰 & 改行 & 改ページ & プリンタリセット
Close #IntFileNo
End Sub

5004 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free