好ましからざる人物

Excel VBA の罠

パスワード付きのzipファイルを解凍するコードを書いている。 ネットを見ると、いろいろ出ててテストプログラムを作ってやってみるとすんなりできた。 簡単じゃんと思いながら本チャンでやると解凍できない現象が...。 更にググってみると、同じような現象が出ていた。 解凍するパスをダブルクオートで括って実行すると上手くいくのに変数に入れてやるとエラーになるというボクのと同じ現象。 『そんなことはない、なんか間違えてるんだろう』みたいな回答しかなかったんだけど、ソースを良く見ると、パスを入れる変数の型がVariantになっている。 ボクは、String型でやっていたのでVariant型に変えてみると、あぁら不思議、ちゃんと解凍できるじゃありませんか。 まったく、ボクにはよくわからないよ。

====================================================
' ダメなパターン
    Dim strUnzipPath As String
    ' 出力パスを拾って
    strUnzipPath = Worksheets("Sheet2").Range("A1").Text
    Set zipObj = shellObj.Namespace(ActiveCell.Text).Items
    Application.SendKeys strPass & "{Enter}"
    ' 解凍する
    ret = shellObj.Namespace(strUnzipPath).CopyHere(zipObj)


====================================================
' おっけーなパターン
    Set zipObj = shellObj.Namespace(ActiveCell.Text).Items
    Application.SendKeys strPass & "{Enter}"
    ' 解凍する
    ret = shellObj.Namespace("C:\Unzip").CopyHere(zipObj)


====================================================
' ダメなパターンの変数をVariant方にするとおっけーになる
    Dim strUnzipPath As Variant
    ' 出力パスを拾って
    strUnzipPath = Worksheets("Sheet2").Range("A1").Text
    Set zipObj = shellObj.Namespace(ActiveCell.Text).Items
    Application.SendKeys strPass & "{Enter}"
    ' 解凍する
    ret = shellObj.Namespace(strUnzipPath).CopyHere(zipObj)

--
あめ のち はれ

Nessun commento: