2011年8月16日火曜日

Excel VBA bullzipでPDF変換ではまる

結局ExcelのシートをPDFに変換するのに、JustのPDFプリンタだとVBAから設定をいじれないらしいことがわかって、BullzipというPDFプリンタドライバを使うことにした。

Excel VBA PDFといったキーワードでググればすぐに行き着くこのblog

EXCEL VBAからシートのPDF変換を行う - BullZip PDF Printer - Developer☆STYLE

でサンプルコードが手に入り、さらにBullzipの配布元のサンプルコードも読むことができる。

COM Automation from VB Script

ただ、児童の氏名からファイル名を作って、どんどんActiveSheet.PrintOutとやると動作がおかしくなる。具体的には
Set objPrinterSettings = CreateObject("Bullzip.PDFPrinterSettings")
For i=1 to 40
  WorkSheets("学級入力シート").Range("AD12")=i
  if WorkSheet("学級入力シート").Range("B16")<>"" Then '児童名のセルが空白でないなら
    savePath=ActiveWorkbook.Path & "¥" & WorkSheet("学級入力シート").Range("B16") & "_様式1.pdf"
    With objPrinterSettings
        .SetValue "output", savePath
        .SetValue "showsettings", "never"
        .SetValue  "ShowPDF", "no"
        .SetValue "ShowProgress", "no"
        .SetValue "ShowProgressFinished", "no"
        .WriteSettings True
    End With
    WorkSheets("学級入力シート").PrintOut from:=1,to:=1 
  End if
Next i
ま、こんな感じでファイル名を指定して、PDF変換中や変換後にあれこれ問い合わせをしない状態で、40人分いっぺんにPDFに変換できる、はずなのだが、なぜかうまくいかないで悩んだ。

症状としては、「アンパンマン.pdf」なのに、中身はカレーパンマン、というふうにファイル名と変換されるシートが一致しない。ところが、ブレークポイント作ってステップ実行すると思った通りの動作をする、という。これには頭を抱えた。

結論からいうと、Next iの前に

Application.Wait("0:00:02")

と2秒ほどのWaitを入れるといいことがわかった。
objPrinterSettings.WriteSettings TrueでPDFプリンタドライバの.iniファイルに設定を書き込んでいるので、少しだけ待ってやらないとPDF変換のほうがiniファイル書き込みを追い越してしまうらしい。

いやー、わかったときはガッツポーズでありました。

やはり、VBAといえどもプログラミングはおもしろい。そろそろCocoaも再開しようかな。まだ面白い本が何冊か残ってるんだよなー。

夏、終わる?

日曜日あたりからずいぶんと涼しくなった。今日は1日じゅう雨、窓を開けていたら肌寒い。北国である。これで夏も終わりか、とみんな言う。二学期が始まった途端ムチャ暑くなったりもするけど。

暑いうちはiMacの前に座る気がしなかった。なかなか発熱がすごい機械であることを知った。

で、読書ばかりしていて、やっぱり本を読むのは楽しいと再確認。ここ1年ばかり下手なプログラミングに熱中していて、全然本を読んでいなかった分、未読のおもしろい作品がたっぷりあってそれを現在楽しんでいる。

天冥の標 2 救世群 (ハヤカワ文庫JA)
小川 一水
早川書房
売り上げランキング: 44284

ねじまき少女 上 (ハヤカワ文庫SF)
パオロ・バチガルピ
早川書房
売り上げランキング: 2116

ねじまき少女 下 (ハヤカワ文庫SF)
パオロ・バチガルピ
早川書房
売り上げランキング: 3168

週末にかけて以上3冊読了。小川一水はいいですなあ。

で、「ねじまき少女」。ヒューゴー、ネビュラ、ローカスのトリプルクラウンである。SFとしてもエンタテインメントとしても一級品の作品でないとこの3つを受賞できないわけだけど・・・アメリカ人ってオリエンタリズムに弱いのかな。

日本人が読めば登場する日本人に首をかしげるだろうし、タイの人が読んだら怒り出しそうな気がする。
細かいことをつつかなければ、十分におもしろい作品で、優れて現代的、なのだと思う。結局主人公はイエローカードのおじいちゃんだった、というあたりが皮肉でいい。

ねじまき少女に関わって最後の最後でぱっと開ける新たな未来の予感もなかなか。こういう終わり方をするSFは確かにいいな。

2011年8月13日土曜日

読了・「天冥の標 メニー・メニー・シープ」小川一水

天冥の標〈1〉―メニー・メニー・シープ〈上〉 (ハヤカワ文庫JA)
小川 一水
早川書房
売り上げランキング: 97706

天冥の標〈1〉―メニー・メニー・シープ〈下〉 (ハヤカワ文庫JA)
小川 一水
早川書房
売り上げランキング: 21182

長大な小説の第1巻、それも上下巻なのだけれど、これだけのエピソードを詰め込むならやや書き飛ばし気味、という感じ。

結末にのけぞったけれど。これはおもしろい。すぐに2巻目に突入する。

2011年8月10日水曜日

読書中

風の墓碑銘
風の墓碑銘
posted with amazlet at 11.08.10
乃南 アサ
新潮社
売り上げランキング: 241790

読了。音道シリーズは全部2回以上読んでるわけだが、この作品は再読。久しぶりなのでほとんど内容を忘れていて楽しめた。老人力にもいいところがある。

次はこれ。
天冥の標〈1〉―メニー・メニー・シープ〈上〉 (ハヤカワ文庫JA)
小川 一水
早川書房
売り上げランキング: 116523
日本SFってものすごく進化してるなあ。ビジョルドなみのストーリーティングじゃないのよ。

やっぱ本はええなあ。

2011年8月8日月曜日

人間ドック

本日は人間ドックで終了。

成人病予備軍である。(;_;)

てか老人3歩手前くらいの歳なので、今更節制せよ、と言われてもその気になれないが。節制せよと言われに行くのが人間ドックなわけだから、仕方ない。

今日は乃南アサの「風の墓碑銘」でも読み返すことにしようっと。

2011年8月7日日曜日

読了・「キングの死」ジョン・ハート

1日じゅう涼しいリビングで読み続けて、さっき読了。

キングの死 (ハヤカワ・ミステリ文庫)
ジョン ハート
早川書房
売り上げランキング: 79552

たまげた。こんなすごい作品が出てたのか。「ブルー・ヘブン」がかすんで見えるよ。

160ページくらいまで、主人公の感情の振幅が大きくていまいちノレない感じがしていたわけだが、マックスと一緒に歩き出したあたりから急速に物語がいきいきとしだした。

で、しびれる法廷のシーン。これにはまいった。
隅々まで書き込んで読者サービスっもたっぷりだし、こりゃ喜ばれるわ、ミステリ界に。というわけで、明日は図書館休みだから我慢して、明後日に他の作品を借りに行こうっと。

2011年8月6日土曜日

暑いので

北海道の短い夏の本番を迎えた。昨夜はあまりに暑くて、今年初めて窓を開けたまま寝た。

今日も暑くて、エアコンが効いているリビングでずーっと本を読んでいた。

で、この本を読了。

オー!ファーザー
オー!ファーザー
posted with amazlet at 11.08.06
伊坂 幸太郎
新潮社
売り上げランキング: 18818

伊坂幸太郎は安心して読める良質の作品をよくまあこんだけ量産できるな、という感じ。途中で出てくる小さなエピソードがすべてクライマックスの伏線になっている、よく「作りこまれた」物語。しかもミスリードがうまいんだよなあ。

というわけで暑い間はXcode触る気力がわかないので、しばらく読書で過ごすことにする。

読書モード

再インストール中はひまだったので本を読む。

ブルー・ヘヴン (ハヤカワ・ミステリ文庫 ホ 12-1)
C.J.ボックス
早川書房
売り上げランキング: 73299

なんとなく借りてきてあったこの本を読み始めたらおもしろくて読み続けてしまった。
C・J・ボックスってJ・C・ボロックだと勘違いしていて今までノーチェック。(^^ゞ

気になって調べてみたら、講談社から出ている
沈黙の森 (講談社文庫)
シー.J・ボックス
講談社
売り上げランキング: 363558
この本は読んでいた。むー、老人力。

さて「ブルー・ヘブン」、読み始める前に想像していたような冒険小説ではなく、どちらかというとミステリよりのサスペンス、スリラー、という感じだった。幼い姉弟をつれて山岳地帯を逃げまわる、みたいな話かとおもったけどそうではなかった、と。十分おもしろかったけど。

2011年8月4日木曜日

OSX Lion クリーンインストール失敗

DVDからLionのインストーラを起動して、きれいに消去した800G程のパーティションを選択してインスール開始・・・「追加コンポーネントをダウンロードしています。自動的に再起動します」という表示が出て、プログレスバーが3分の2くらいまですすんだところで進まなくなる・・・1時間放置したら「残り時間」がどんどん増えていた。

インストーラではWifiが認識できないので、使うのをやめていた有線LANとのコンバータ(いわゆるイーサコンバータ無線子機)を引っ張り出してきてセットアップ、ネットに繋がる状態にして再挑戦。(もうこのあたりで冷や汗だらだら流れっぱなし)

同じところでやっぱり止まったのであきらめた。ここまでが昨夜のできごと。

くらーい気分で出勤して、なーんだSnow Leopardを入れて、またアップデートすれば「ほぼクリーンインストール」じゃん、と気がついて、帰宅後に作業した。

で、今ここ、ってやつですな。Lionが復帰している。FirefoxとGoogle日本語入力を入れて、この日記を書いている。

やー、しかしSnow Leopard、AppStore入のソフトウェアアップデート、Lionダウンロード、インストールという道のりの遠すぎる。

DVDを使ったクリーンインストールが失敗する原因はなんだろう?ざっと調べても同じ症状の人は見かけないし。一部で噂になっているBootCampパーティションがあるせいなのか、あるいはパーティション構成がいけないのか(基本領域は全部使っている)・・・もうめんどうだから原因追求はしないけど。

ただ、思ったとおり「ほぼクリーンインストール」でも大変快適になった。購入当時のサクサク感が戻ってきた。苦労した甲斐はあった、と自分を慰める。

2011年8月2日火曜日

LionのインストールDVDを作ろうとしている

あちらこちらの解説を参考にして、LionのインストールDVDを作成するためAppStoreからLionを再ダウンロード中。

時々、なんだかOSXの動きが異常に鈍重になるのが気になっている。Lionにしたせいなのか、Lionを上書きインストールしたからなのか、それとも私の環境のせいなのか、問題の切り分けが全くできない。

おそいなあ、と感じるのは

1,Xcodeのビルド
2,同じくビルド後のRUNするまでの時間
3,文字入力全般(google日本語入力使用)
4,Firefoxの動作全般(うーん、これは・・・OSXじゃないか)
5,OSXの起動時間が確実にのびた

・・・あらま、このくらいか。大したことないかも、Vistaん時に比べると。(比べちゃいかんか)
しかしあれこれ余計なappとか拡張とかインストールしまくっていた時期があって、それが原因という可能性もある。

一度クリーンインストールしちゃってもいいかなあ、と考えている次第。
環境を再構築するので当然TimeMachineは使わない方向で。

ただ、またまたWin7が飛ばされる可能性も否定できないので、そっちのバックアップをちゃんとやって、ブラウザ関係のSyncとか整備してから、そして時間と心に余裕のある時、なので今度の土曜日かなあ。

Lionのダウンロードにも非常に時間がかかりそうだ。明日中に終わるかな。(今日はもうあきらめているという)

Cocoa CALayer勉強開始

ちょっことだけ始めていたNSViewのアニメーションの勉強の続き。
どうせ勉強するなら見た目の派手さを演出する方法を知る(努力をする)のも悪くないだろう、という判断。実を結ぶかどうかは怪しいわけだが。

「CALayer」だけでググると、iOSのUIView関係の資料やらblogがどんどん出てくる。これを「Cocoa CALayer」に変えると、一気に英語サイトが増えてしまう。Cocoaが下火なのではなく、iOSがお盛んなんでありましょう。

さて行き着いた

【特集】Leopardのアニメーションを簡単実装! Core Animationを使いこなす (3) レイヤーの使用法 | エンタープライズ | マイコミジャーナル

これって以前にも一度、チュートリアルとしてひと通り試したぞ、全然忘れてるけど。

木下誠氏の解説はツボをおさえてあってわかりやすいなあ。初学者の気持ちっていうか心持ちっていうかをよくわかっていらっしゃる。

本日は木下誠氏の教え通りに、Controller.mにawakeFromNibを書いて、ウィンドウを表示して終了。

(void)awakeFromNib{
    CGImageRef ckyImage;
    CALayer* ckLayer;
    NSMutableString* fileName=[NSMutableString stringWithString:NSHomeDirectory()];
    [fileName appendString:@"/IMG2.jpg"];
    
    NSBitmapImageRep* image=[NSBitmapImageRep  imageRepWithContentsOfFile:fileName];
    ckyImage=[image  CGImage]; 
    ckLayer=[CALayer layer];
    ckLayer.contents=(id)ckyImage;
    ckLayer.frame=CGRectMake(0, 0, 128, 80);
    
    CALayer*    backgroundLayer;
    CGColorRef  blackColor;
    backgroundLayer = [CALayer layer];
    blackColor = CGColorCreateGenericGray(0, 1.0f);
    backgroundLayer.backgroundColor = blackColor;
    CGColorRelease(blackColor);
    [backgroundLayer addSublayer:ckLayer];
    
    [testView setLayer:backgroundLayer];
    [testView setWantsLayer:YES];
    
    
}

用意した画像は愛犬のかわいいお顔(^^;)

初めは画像をcontentにしたLayerを直接ViewにsetLayer:したら、Layer.frameで指定したサイズが全く無視されてView全域に張り付く感じで表示された。
木下氏のコードどおり背景Layerを1枚はさんだら、frameの大きさが反映された。なるほど。

CALayerは超軽量subViewみたいなもの、というふうに今のところ考えておこう。
久しぶりにXcode触ってなんだかうれしい。

2011年8月1日月曜日

Cocoa addGlobalMonitorForEventsMatchingMask

NSEventのやたらと長いクラスメソッド、addGlobalMonitorForEventsMatchingMaskを使えば、デスクトップ上のマウスイベントを比較的簡単に捉えることができる。これもxcatsan師匠の受け売りだけど。

キー入力の捕捉は「ユニバーサルアクセス」の「補助装置にアクセスできるようにする」オプションを有効にしないとできないようだが、マウスの方は関係なく捕捉できる。これはSpinでやったので以前に触れたことがある。

日暮れて道遠し: Cocoa ObjC Spin デスクトップでマウスころころでSpacesを切り替える

これを使ってまたまたなにかやってみよう。SpinがLionで動くようになる目処が立たないので、とりあえずSpinの補助的な機能だったタスクスイッチャにしてみようか、と考え中。

iMac上のBootCampのWin7を使ってからLionに起動しなおすと、Lionの動きが随所に「ひっかかり」がある感じがするのは気のせいか?

特に日本語入力のタイミングが若干遅くなったような。ただあれこれインストールしまくって、OSXそのものが鈍重になった気もするので、ここらでクリーンインストールしてみるのもいいのかな。
ちなみにBootCampのWin7はインストールしたばっかり、アプリはOfficeくらいというクリーンな環境だから速くてあたりまえだけど。

OSXでExcel

試用版を少し触ってみた。
見た目はWin版よりかなりかわいい。リボンインターフェイスの見せ方や、ボタン類の構成もExcel2010と微妙に違うようだ。


Sheetのタブの見せ方はOSX版のほうがいいと思う。視認性が高いと思われる。


そしてVBエディタ。Win版ではいわゆるMDI(というインターフェイスもなんだかかなり廃れている気もする)だが、OSXだと昔のDelphiそっくりになった。


VBAに関してはやはりファイル関連がWin版のままだと使えない。そりゃそうだわな。
Winで動かすマクロはWinで作るしかない。というわけでExcel購入は消え去った。うむ、ある意味よかった。