ラベル 印刷 の投稿を表示しています。 すべての投稿を表示
ラベル 印刷 の投稿を表示しています。 すべての投稿を表示

2021年4月2日金曜日

Canon MG5400 series プリンタをLinuxで使えるようにした話

 Linuxでキヤノンのプリンタを追加するとなると、ドライバを公式から落としてきてtarしてinstall.shを走らせて、という流れになると思うのが人情です。しかし我が家で使っているMG5430(ドライバは「MG5400 series」)は型が古いため、対応OSがUbuntuなら12.04 LTSまでということになっている。実際もう少し新しいバージョンでも使用はできるようですが、18.04ぐらいになるとドライバの参照しているライブラリがバージョンアップで既に存在せず、依存関係エラーでインストールできません。

幸いLinuxは開発者/ユーザーの集合知で汎用ドライバや代替ドライバで使用できることがほとんど。ということであまり気にせず「設定」>「プリンタ」→ネットワークプリンタの項を開くとWi-Fi接続中のプリンタが見えました。しかしここからが厄介で、プリンタ(表示される型名も「MG5400 series」となっている)を追加してドライバを自動検索しても「ソフトウェア」アプリで再検索しても、見つからない。ということは作業が完了しないのです。

そこでググったところ、もう10年以上?前から組み込まれている「CUPS」という機能で代替ドライバを探し、使用できることが多いとのこと。確かに「ネットワークプリンタ」と同じ項に「Generic-CUPS-BRF」という項目があったな。ではやってみましょう。


しかしここで使うのは「プリンタ」ではなく、ブラウザなのです。ブラウザのURLバーに「http://localhost:631/」と入力しエンターすると、CUPSサーバー(?)が表示されます。

ここで「管理」タブをクリックすると、左上に『プリンター』の項目が。ここで設定をするのです。
「プリンターの追加」をクリック。

左側2段目に『発見されたネットワークプリンタ』、その横にプリンター名が表示されます。

今回の場合「Canon MG5400 series」でひとつには「(driverless)」という表記があります。確かにドライバはインストールできていないので、こちらを選択。「このプリンターを共有する」はWi-Fiなので多分どっちでもいいんだけど、念の為「共有しない」にしておく。

『プリンターの追加』になるので適当な名前を入力。

名前にはスペース(" ")は使えないので注意。

次に「モデル」を選択するのですが、なるべく近いものを選んだほうがいいんじゃないかな。


最後にデフォルトの設定を確認されます。

普通はA4普通紙とかだと思うので「Photo Paper」を「Stationary」に変更します。カラー/モノクロや両面印刷の設定もちゃんとできますね。

追加が完了するとこんな感じです。

右側のリストボックスで「プリンターの削除」とかもできます。


ドライバが見当たらないとかインストールできないモデルは、これで探すと使えるようになるかもしれないというお話でした。あとMG5400系機種を使いたいけどうまくいかない!という方にピンポイントで刺さると嬉しいです。

2020年7月5日日曜日

無線LANの罠

6月にWindows大型アップデートが来たせいか、印刷ができなくなってしまいました。

今まで、2階のデスクトップPCから1階の無線LAN接続プリンタに接続して印刷することができていたのに。具体的には以下の図のようになっていました。
これ見ると、たしかにアクセスポイントである子ルーターは別ワークグループになっていて、プリンターに接続できなさそうに見えるんですが…以前はできていました。

とりあえず、5月には印刷できたんですよね…理由はよくわからないですが。なので、6月のアプデの影響ではないかと…とは言え、現状接続できないことに変わりはないので、接続を見直します。ひとまずワークグループから。
そもそも、なぜPCをモデムに直接接続してたのかよくわからんので、親ルーターからすべて分配するように変更。これでデスクトップからはプリンタが見えるようになったので、ドライバを設定し直して完了。で、親から分配されたネットワークなので子ルーターのアクセスポイントからもプリンターが見えたらいいな…と思っていたんですがそれはどうやら甘かった。


今回わかったことは、有線でも無線でも同じアクセスポイントに接続していなければネットワークプリンタを操作することはできない、ということでした。ググってもこの事例を紹介しているサイトはなかったので、図にしてみました。まあネットワークの基本を考えれば、こういう構成にすると思うんですけど、先日交代した先代の親ルーターがわりと不具合多いモデルだったため、色々やってるうちにBefore構成に落ち着いていたんだと思います。Win10も2018年までは「ホームネットワーク」機能があって、それでつなげていた可能性もありますし。

とにかく誰かの役に立てば幸い!

2019年11月5日火曜日

可動範囲への印刷設定アドバンス

このエントリの続きです。

設定したい範囲のデータ途中に空白行があるときは、COUNT/COUNTAだとどうしても実際の最終行とズレが出てしまい特に行数が多いときに必要な範囲に設定されないケースが出てきます。これを防ぐには配列数式を使うしかないようです。もしくはVBAで設定するしかないんですが、ワークシート関数だけで完結したいじゃないですかやっぱりぃぃ。

と言うわけでその最終行の出し方。

MAX(INDEX((LEN(列)>0)*ROW(列),0))

なんですけど、これを

=OFFSET(範囲,0,0,MAX(INDEX((LEN(列)>0)*ROW(列),0)),列)

と設定して印刷プレビュー→ページをめくると…メモリ不足で落ちるんです…。

ま、うちの職場の環境ではと言うことではあるんですけど、i3・3GBメモリのマシンなので、大体どこもおんなじくらいか下手すりゃそれ以下ですよね事務系なんて。
でこれはアカンということで、印刷範囲外のセルに最初の数式を書き、そこを4番目の引数に指定しました。これでひとまず安心です。

おまけ:VBA限定ですが、最終行だけならUsedRange.Rows.Countプロパティでも取得できます。ただし書式設定していないことが条件。…事実上使えない知識ですね…。

2015年11月9日月曜日

シート内のリストから差し込み印刷ラベルを作る

元々VBAからWordを呼び出して、値渡し→ラベルレイアウト…と考えていたんですけどそれは結構難易度が高く、業務用にちゃちゃっとプログラミングというわけに行かなかったのでちょろっと調べてみました。

まずはWordでマクロ記録をしてみたんですが、差し込み印刷関係が記録されないので、この辺のメソッドやらプロパティを調べるのはもう止めました。だってもっと簡単な方法あるから。


  1. データソースと差し込み印刷設定済みWordファイルを固定ディレクトリに配置しておく
  2. データソースに表示データを上書き
  3. Wordファイルを呼び出す


処理としてはこれだけ。ファイルを生成しないので設定あるいはメンテナンスのひと手間がありますが、例えば次の担当者が使いたいと言った時の敷居が低いのもこれかなと。

まあこれだけ書けばコード書ける人には説明不要でしょうけど、一応続き以降にサンプルコードを載せておきます。


2015年8月3日月曜日

印刷時に特定のセルを"非表示"にする

【印刷時に特定のセルを"非表示"にする】 印刷時のイベント制御には以下のイベントを使います。
  1. 印刷前:ThisWorkbookモジュールの「Workbook_BeforePrint」
  2. 印刷後:Application.OnTime

(上記、詳しくは www.officelabo.net/vbaskill/vba20.html を参照のこと)

これらを使って、特定のセルの内容を帳票に出力されないようにします。例えば外部に出しちゃいけない数値とか、ブック/シート利用者への注意事項とかそういうアレです。

----以下---------------------------------------------


//(1)ThisWorkbookモジュール////
1  Private Sub Workbook_BeforePrint(Cancel As Boolean)
2   Sheets("hoge").Range("A1:B2").Select
3   Selection.Font.Color = RGB(255, 255, 255)
4
5   Application.OnTime Now(), "Macro1"
6  End Sub


//(2)標準モジュール////
1  Sub Macro1
2   Sheets("hoge").Range("A1:B2").Select
3   Selection.Font.Color = RGB(0, 0, 0)
4  End Sub

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

(1)について、セルを非表示にしようとすると行を隠す(Rows(x).Hideプロパティ)しかないので、文字色を白にすると言う若干姑息な手段。でも実行結果が同じなら問題なしってことで。
 ちなみに2-3行目はSelection.Font指定でないとうまく実行できなかったので。
 CollorIndex指定でも良いのですが、わからなかったのでRGB指定してます。
(2)については、印刷後に文字色を黒に戻す処理。(1)のApplication.OnTimeがプロシージャ名で指定する仕様のようなので別系統で標準モジュールに記述します。

****

実に簡単なコードかつこれだけあれば十分ですが、万が一エラーがあったときに印刷できないと仕事が滞る場合もあるのでOn Error処理でエラーナンバーを表示してからResume  Nextとか入れておくと間違いないでしょうね。
また文字色は固定で無いこともあるかも知れません。そんな場合は(1)の時点で元の文字色を取得し(2)で戻す方が良いでしょう。ただPublic変数とか使って面倒なのでやりませんでした(ホジ

自分の場合、対象セルの内容を出力したい場合もあるので(SubTotal関数とか埋め込んである)
メイン処理を別プロシージャに書いておき、(1)で処理するかしないか問い合わせてから必要があれば呼び出すようにしました。ついでに、処理対象のシートでなければそもそも処理しないようにIF節を追加してます。

----以下---------------------------------------------


//(1)ThisWorkbookモジュール////
1  Private Sub Workbook_BeforePrint(Cancel As Boolean)
2
3   Dim ret As Integer
4 
5   If ActiveSheet.Name = "hoge" Then
6    ret = MsgBox("テキストを非表示にして印刷しますか?", vbYesNo, "文字列の操作")
7      Select Case ret
8          Case vbYes
9     Call TextHide
10     Application.OnTime Now(), "Macro1"
11         Case vbNo
12          Exit Sub
13     End Select
14  End If
15
16 End Sub

//(2)標準モジュール////(略)

//(3)標準モジュール////
1  Sub TextHide()
2   Sheets("hoge").Range("A1:B2").Select
3   Selection.Font.Color = RGB(255, 255, 255)
4  End Sub

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

こんな感じ。

ポイントはApplication.OnTimeです。
あ、あとOffice2010以降?("リボン"の付いたバージョン)は[Ctrl]+[P]するとマクロ走る前に印刷プレビューされてビビりますが、実行するとちゃんと走りますのでよほど視覚的誘導に問題が無ければ大丈夫です。な筈。