キーワード

プロフィール

深沢千尋

Author:深沢千尋
みなさんこんにちは、深沢千尋です。(公式ページ
文字コード【超】研究 改訂第2版NEW!」「すぐわかるPerl」「すぐわかる オブジェクト指向 Perl」の著者です。
ここでは、多くは技術的でないこと、ごくまれに技術的なことをなげやりに書いていきます。
メールは suguwakaruPerl@gmail.com まで。(アットマークは ASCII に)
Twitterはじめました。@query1000です。よろしく~

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード

QRコード

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ふだんPerlを使っている人がExcel VBAを使っていて感じる面倒くささ

こういう話をするときは面倒くさいんだけど、逆の人は逆に感じると思うよ。
どっちがいいとかそんな話をしているわけではない。

Set mySheet = ActiveSheet.Copy(After:=ActiveWorkbook.Sheets("Summary"))

という文がある。

何気ない文である。
現在見ているワークシートをコピーして、Summaryというシートの後に挿入し、そのシートオブジェクトをmySheetに設定する。

これが面倒くさいのである。

まず、Setを忘れる。
Setは普通の文字列とか数値とか、そういうスカラーのときはいらない。
シートとかそういうオブジェクトのときはいる。
どっちかすぐ忘れる。

忘れるとどうなるか。
「オブジェクトはこのメソッドをサポートしていません」と言われる。
ええっ何を言っているかわけがわからないよ。

で、右辺の

ActiveSheet.Copy(After:=ActiveWorkbook.Sheets("Summary"))

であるが、引数をカッコに入れて関数形式で渡している。
これを、

ActiveSheet.Copy After:=ActiveWorkbook.Sheets("Summary")

のようにカッコを省略して演算子形式で書こうとすると、怒られる。
今度は入力するなり怒られるのである。
「コンパイルエラー 修正候補:ステートメントの最後」と言われる。
だからわけわかんないって。

まあ、この式の右辺に演算子が来れてカッコが省略できるというのは、Perlが異常なのかもしれない。

問題は、

ActiveSheet.Copy After:=ActiveWorkbook.Sheets("Summary")

を Set 文の右辺ではなくて単独に書こうとしたとき、つまりワークシートのコピーだけしてそのシートをオブジェクトに取らなくていいときは、カッコを省略しないと怒られるのである。

ActiveSheet.Copy(After:=ActiveWorkbook.Sheets("Summary"))

これだとダメ。
今度は実行時に怒られる。
「プロパティの使い方が不正です」と言われる。
いいじゃん、関数を単独で書いて文にして戻り値を捨てたって!

難しいことはよくわからないが、上記の2つに関しては、言語仕様の手抜きのような気がする。
もっと好きに書かせてほしいのだが、それだと言語を設計する方が大変なのだろう。

さて、微妙に別の文だが、

Set myWorkSheet = ActiveWorkbook.Sheets("Uriage")
if myWorkSheet is Nothing Then
。。。

みたいなコードを書こうと思った。
Uriageというシートを探して、もしなかったら作れよ、みたいな。
これが怒られる。

ないシートを参照に行くと「実行時エラー '9'」になるのである。
だからわけわからないって!

この場合は

On Error Resume Next
Set myWorkSheet = ActiveWorkbook.Sheets("Uriage")
If Err = 9 Then
。。。。
End If
On Error Goto 0

みたいにしないといけない。
(Workbookのプロパティをイテレートするとかもっと穏当な書き方があるけど、上のが速い気がする)

このコンパイルエラーと実行時エラーが乱れ飛ぶ感じ、エラーメッセージが一切実り多い情報をくれない感じがすごい。

いや、よく知らないのに生兵法でいじっているこっちが悪いので、正規の教育を受けた人なら引っかからないのだと思うのだが、とりあえず苦労している。
スポンサーサイト

テーマ : 雑記 - ジャンル : その他

<< おやつハック | ホーム | メガネ体験 >>


コメント

コメントの投稿


管理者にだけ表示を許可する

 ホーム 


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。