
ファイル名が消えた!
Excelのマクロで、ファイルを保存する処理を実装しているものがあるのですが、ある日、ユーザーから「保存できなくなった」という問合せを受けました。
実際に画面を見せてもらうと、GetSaveAsFilenameメソッドの動作が何やら変です。
ファイル名をシステム側で自動設定させているのですが、なぜかファイル名が空白になっています。
ソースはこんな感じです。
'ワーク変数
Dim myFile
Dim myName As String
'適当に名前を付ける
myName = "金剛.csv"
'GetSaveAsFilenameメソッドを実行
myFile = Application.GetSaveAsFilename(myName, "CSVファイル,*.CSV", 0)
結構、多くのユーザーが使用しているExcelマクロなのですが、こんな事象は初めてです。
ためしに、私のパソコン(WindowsXP & Excel2010)で同じ処理を動かしたら、問題なく動作しました。
環境問題か?
実は、心当たりはありました。
ちょうど、OSがWindowsXPからWindows7に切り替えている時期でして、もしかして、その絡みかと想定してみます。
同じ時期に、Excelのバージョンも2000から2010に切替中でもあったのですが、私のXP&2010で問題が再現しないので、Windows7の問題と判断しました。
...まぁ、7&2010の組合せで発生するって可能性もあるのですが、それは手詰まりになってから考えるってことで。
GetSaveAsFilenameってどこの処理?
Application.GetSaveAsFilenameってメソッドは、ファイルの保存画面を表示するのですが、どう考えても、Excelではなく、OS側の機能を呼出しているとしか思えません。
実際に、XPと7では表示される画面も違いますしね。
もしかして、7で仕様が変わったのか?
試行錯誤しました
いろいろ、試行錯誤したのですが、最終的にはこれで解決しました。
修正前
myFile = Application.GetSaveAsFilename(myName, "CSVファイル,*.CSV", 0)
修正後
myFile = Application.GetSaveAsFilename(myName, "CSVファイル,*.csv", 0)
第二引数のFileFilterで指定している拡張子を、大文字から小文字に変えただけです。
どうやら、7では拡張子の判定が厳しくなったようですね。
他にもいろいろ試したので紹介します。
まず、第一引数のファイル名の規定値で拡張子を除くこと。拡張子の設定は、第二引数「FileFilter」で設定した拡張子が自動的に追加されるので、そちらを使用する。
拡張子を指定したい場合は、FileFilterに合致する拡張子にする。拡張子は大文字と小文字も一致させること。
こんな感じのルールで運用したところ、きちんと動作するようになりました。
後書き
私の会社は、ユーザーの利便性を高めるためにEUCの活用は、結構積極的に行っています。
私たちも、基幹システムと連動するためのExcelとかを提供していたりします。
そんな中で、OSのバージョンアップ(XP→7)と、Officeのバージョンアップ(2000→2010)が行われたものですから、結構ビビっていたのですが、思ったほどの問題にはなりませんでした。
もちろん、ユーザーからかなりの問い合わせがあったのですが、大体は使用方法の確認であって、今回のような問題に発展するケースは少数、案ずるより産むがやすしですね。
まぁ、その少数の中にはOfficeベースのソフトを購入していて、バージョンアップが必要(つまり買い直し)とか言うのもあったりして、大変は大変だったんですけどね。
スポンサードリンク


