2015年12月24日木曜日

Windows 10 に DiXiM Digital TV plus がインストールされていると発生するエラーへの対応

いやあ、えらい目に合いました。

windows10の話。あんまりうるさいので、いよいよwindows10にしたんですよ。
そしたら、突然ブルースクリーン。エラー吐いてデータの保存もクソもなくリブートしてしまう。こりゃ困ったぞと。

前々からIntuosを繋いでCLIP STUDIO PAINTを使ってると動作がヤバいという話をきいていたので、それかなと思っていました。で、Intuosを外しておいて、wacomドライバを最新に。ついでにCLIP STUDIO PAINTも最新にしたり。

しかし、治らない。相変わらず突然リブートしてしまい、20分の作業がパーになったりとかして、ひとり歯ぎしりをしていました。


------

そこでもう少し調べてみると「DigiOn DiXiM Digital TV plus」というネットワークに繋いだデジタルレコーダーの録画データを見るソフトが原因の場合があるとか。

で、ってんで公式ページを見てみると「DiXiM製品: Windows10 Threshold2適用以降ブルースクリーンが発生する問題について」というページがあるではないですか。どうやらこの問題について対応済みアップデータを公開したということなんですが…
なになに、(以下引用)
動作条件を満たさないケース:
 1. NVIDIA や AMD のGPUのみを使用している環境
 2. Intel製GPUを使用しているが、プライマリディスプレイへの出力には
   NVIDIA や AMD のGPUを使用している環境
2がそのまんまです。ありゃ~。
でもプロセッサはIntelだから、メインディスプレイにそちらのGPUを使わせればいいわけで…ってどのディスプレイがどのGPU使ってんだっけ?と。

(長くなるので以下"続き"へ)


2015年11月9日月曜日

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

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

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


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


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

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


2015年8月9日日曜日

新しいおもちゃ

まだiPhoneが物好きなアップル信者のおもちゃと見られていた頃に、既にLinuxerだった私はいち早くスマホにして以来ずっと頑張って初代Xperiaを使ってきました。そう、あの通常ならandroid 2.1までで早々に見捨てられ、クソミソに言われることも忘れ去られたSO-01Bです。貧乏性のLinux冒険者と言うこともあり(なんだそれは)自力でAndroid2.3にアップグレードして使ってましたが、ひどい時は3時間ちょいで電池が3割まで減る等あまりに調子の波が激しく、またもっさりも止まらないので、いよいよ我慢できずに新しい端末を買いました。

機種はelephone G2です。

原色大好きおじさん

最近の中国製はまったく侮れないですね、19,800円だけどAndroidバージョンは5.1(Lolipop)。画面サイズも解像度も大きくない(854x480)ので今のところサクサク動いてます。

データ通信もモバイルルータに挿さってたXi UIMカードを挿して普通に使えております。これまでは通話用FOMAカードとモバイルルータを持ち、データ通信はWi-Fiで、というややこしい状態でした。元々通信費を抑えるために始めたのですが、実際にはXperiaタソが遅すぎて7インチタブレットを買って持ち歩くようになったっていう本末転倒具合。
そうこうしているうちにテザリングも今や当たり前になっていて、Wi-Fi専用機だってスマホさえあれば必要なときにテザリングすればいいだけ。もう個人でわざわざルータなんて…という。時代の流れは早いですマジで。
でも実際ルータをセットで持ってなきゃスマホも使えないってのはかさばるし正直面倒でした。よく考えれば、そこも結構我慢して運用してたんですね。


さてそんなわけでスマホを調達し、これでルーターを持ち歩かずに済んで快適…と思いきややっぱりそうは上手く行かないのが世の常。

これ最近のスマホ全般に言えることらしいんですが、docomoのFOMA SIMカードではデータ通信も通話もまるでダメという。ショップ説明書には"2枚挿ししてXi SIMを有効にした後切り替えればOK"と書いてあったんですが、何度やっても無理&ググってもできたという話は出て来ません。ここは今後SIMフリー端末を購入してガラケーから乗り換えようと言う方は注意して欲しいところです(あんまりいなと思いますけど)。

まあそれも10月までの我慢ですわ、自分の場合。"2年縛り"が切れる月なので、そこでFOMA解約してルータ用のカードを通話できるようにしますから、そこまではとりあえずガラケーを使います(どうせ電話なんてほとんどかかってこないし)。

ってああ、結局2台持ちは変わんねーじゃねえか!…まあガラケーはカバンに突っ込んどけばいいか…最悪通話はハングアウトでやりゃいいんだ。
皆さんもハングアウト使いませんか、便利ですよ(※続きは別の機会に)

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]するとマクロ走る前に印刷プレビューされてビビりますが、実行するとちゃんと走りますのでよほど視覚的誘導に問題が無ければ大丈夫です。な筈。

2015年6月25日木曜日

デスクトップにBluetoothを

え~、デスクトップPCでマウスだのキーボードだの使うと、だいたい最近のはUSBポートをとられます。自分と同様、元々持ってたマルチカードリーダを繋げてるって人も多いでしょう。

私の場合さらにペンタブも使うしプレステコントローラをUSB変換コネクタで繋げてるし抵抗膜式タッチパネルモニタというほとんど文化財みたいなレガシーデバイスもあるしさらにはオーディオインターフェースまで(さすがにこれは常時接続じゃあないけど)!

よくもまあこんなに付けたもんだと思いますが、USBポートってのは何かと必要で、空きは常に1~2個あってほしいもの。それにUSB接続機器が多いとケーブルがごちゃごちゃして大変です。


とまあ長くてまわりくどい前置きになりましたが、その辺改善しようよってことでBluetoothアダプタ付けようと思い立ったわけです。マウス、キーボードに加えてBluetoothヘッドホンも導入すればPCの前にじっとしていなくとも音楽聴けるようになりますしね。理想的には3つの事が同時進行できるという①PC経由でレコーダーの録画消化しながら②キャンバスに向かい③たまにタブレットでSNS みたいな未来文化人めいた生活を妄想しました。


しかし結論から言うと、タッチおよびソフトウェアキーボード機能のないPCでBluetoothを常用するのはちょっとまだやめといたほうがいいです。なぜかと言えば、BluetoothはOSが起動してからでないとデバイスとのペアリング(接続)をしないから。つまり、ログオン画面でいくらBluetoothキーボードを叩いてもパスワードを入力することができません。だからUSBやその他の接続方式のキーボードがないといつまで経っても利用できないわけです。なんだよーBIOSから認識するようにしてくれよー。…まぁそのうちそういうマシンも出るんじゃないですかね、きっと内蔵タイプでしょうけどねw 少なくともそれまではダメってことです。


加えて今回購入した青歯アダプタ、この商品がクセモノで、かなり苦労することになってしまったのです。どっちかっつうと今回のエントリはこの商品の注意喚起です。(ここまでが本当の前置き!)


購入したのはELECOM/LogitecのLBT-UAN04C2シリーズのモデル。


何がイヤって、たくさんあるんですよ(苦笑)



2015年1月5日月曜日

プログレスバーを使おう

大昔に、UserFormのラベルにFunctionで計算した数値から導き出した個数の図形を入れて更新し…という方法を覚えた”プログレスバー”。

しかし最近医調べるとどうやら公式コントロールが存在するという話。

White Tiger - ユーザーフォームに進行状況を表示する方法


うん、リンク先見れば一目瞭然ですね。

実際に使うときには、行数を取得するなど、処理の最終値を実際のものにする必要がありますが、何がすごいかって、Excel 97でも使えるというのが驚き。10年もシェイプの描き変え処理と格闘してきたあの日々は一体何だったのかと言うアレです。


それでも、ってんで一つ補足しておきますと、このコントロールを利用する際のキモは「Application.DoEventsメソッド」です。
…正直これもVBAのヘルプ見ればわかるんですけど(笑)、そこから引用すると以下の通り。
「発生したイベントがオペレーティングシステムによって処理されるよう制御を戻します。」
ということで、プログレスバーコントロールの値を再設定する際にDoEventsすることで再描画するわけです。これやらないと、画面が真っ白に固まったような状態が続いた後正常に戻ったときにはもうプログレスバーなんてどこにもなかった!なんてことになります。


あ〜これでやっと延々と行われる処理をいつ終わるかとモニタの前でどら焼き齧りながら待っているような真似をせずとも良いわけです。よかったー。

2015年1月4日日曜日

Linuxbeanのスリープ復帰後マウス問題

明けましておめでとうございます。

前回の投稿から約五ヶ月経ってしまいました。



さて、表題の件ですが、前々から…それこそ前回Linuxbeanをインスコしてたときから気になっていたんですけど、今回ググったらいい記事がありました。昨年の5月に書かれたエントリだったので、それまでは調べても出てこないわな。ということでリンク貼っときます。


linuxbeanでACアダプタに繋いでいない時にでもマウスを有効にする|zauberkraft

(http://zauberkraft.blog135.fc2.com/blog-entry-17.html)


実際問題リンク先見ていただけばわかるんですが、割とそちらがそっけない書き方なので補足。
  1. スリープする前に(USBマウスが動作してる状態で)、[$ lsusb]でデバイスのIDを取得しておく。
  2. IDの次に記述されているデバイス名で、マウスを見つける。自分の場合は"Logitech, Inc. V220 Cordless Optical Mouse for Notebooks"なんて書いてありました。
  3. 2の"ID"以下にある "xxxx:xxxx" で表現されているIDをコピー。
  4. Leafpad等で "/etc/laptop-mode/conf.d/usb-autosuspend.conf" を開く。[$ sudo leafpad /etc/laptop-mode/conf.d/usb-autosuspend.conf]とかやると楽。勿論viとかで開ける人はそちらでどうぞ。
  5. "AUTOSUSPEND_USBID_BLACKLIST=" という文字列を探し(多分39行目あたりなんだろうけど、検索しましょう)、コピーしたIDをペースト。あとは保存すればOK。
こんな感じ。

もうちょっと設定ファイルとかのこともわかるようにならなきゃいけないなあと思いましたマル。