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