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

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も再開しようかな。まだ面白い本が何冊か残ってるんだよなー。

2011年4月4日月曜日

Excel 共有違反

できあがったワークシートをさっそく学年打ち合わせで使ってみた。bookを「共有する」にしておけば、ネット上のドキュメントを複数人で編集しながらあれこれ打ち合わせる、はずだったのに、なぜか「共有違反で保存できません」というエラーが頻発する。

しかも一度閉じたファイルが「ロックされています」とか言われて開けなくなってしまう。なんじゃいなExcel。

がっくりきましたよ、土曜日半日かけたので。しかたなく共有しない状態で(ひとりだけ編集できて、後の人は読み込み専用状態で閲覧)打ち合わせをすることになってしまった。がっくり。

帰宅してからググってみたらけっこう有名なエラーらしい。ウィルスバスターが悪い、という説がたくさんあちこちで書かれているが、MSご本尊はこんなふうにも書いている。

Windows Vista または Windows 7 上の Excel 2007 または Excel 2010 でファイルの上書き保存に失敗する場合がある

修正プログラムがあるらしいんだけど・・・パソコン使うのに慣れていない人たちがパッチを当ててくれるかが疑問だなあ。

2011年4月3日日曜日

Excel VBAの研究

図書館にけっこうVBA関係の本があったので借りてみた。

そこが知りたい!Excel VBAプロの技 Excel97/2000/2002/2003対応!
井川 はるき
ナツメ社
売り上げランキング: 382606

プロの技、と言われたら興味も湧く。さらっと読み始めたら、なかなかおもしろい。知らないことだらけであることがわかった。

そうか、ちゃんと変数を宣言してから使えばコード補完とかしてくれるのか。(^^;)知らなかったよ。
VBAは変数名に日本語が使えたりして、もうなんでもありのお気楽テキトープログラミング、なのだとばかり思ったらそうでもないみたい。

恥ずかしながら「オブジェクト変数」が使える、というのを知らなかった。ああ恥ずかしい。Setすればいいのか。これができるならかなり見やすいコードになるな。

というわけでけっこう楽しんで本書を読んでおります。
Excelの勉強は仕事の効率に直結するので、趣味と仕事が一致する珍しいパターン。