- ベストアンサー
VBAでファイルを圧縮する方法とエラー対処法
- VBAを使用してファイルを圧縮したいが、エラーが発生する
- 参考にしたページのコードをそのまま使用し、ファイル名を変更したがエラーが解消されない
- 必要なDLLファイルが正しい場所に配置されているか確認する必要がある
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#当方 64bit の Excel を持っておりませんので、検証はしておりません。 【1】-------------------- >「ファイルが見つかりません。 (Error 53)」になります。 >もしかしてC:\WINDOWS\system32ではないフォルダに >・・・入れるのでしょうか? ●ChainLP V0.40-16 http://no722.cocolog-nifty.com/blog/2012/11/chainlp-v040-16.html に、 >64bit-OSの場合は、dllのコピー先はC:\System\System32ではなく、 >C:\System\SysWOW64になりますので、注意して下さい。 と出ていますので、恐らく、「C:\System\SysWOW64」の方にコピーしたらイケるのではないかと思われます。 ただし、 ●x64版で利用できる x64版アーカイバ DLL について http://www.ponsoftware.com/archiver/help/X64DLL.htm には、 -- ここから引用 --------------------------------- 【注意(Windows 64bit版をお使いの方)】 64 ビット版 DLL を共有利用する場合の導入先は、\Windows\System32 です。 32 ビット版 DLL を共有利用する場合の導入先は、\Windows\SysWow64 です。 お間違えのない様、ご注意ください。 -- ここまで引用 --------------------------------- と出ていて、前記と全く逆のことが書かれていますので、「共有利用」という意味が、私には解りませんが、何でしたら、「System32」と「SysWow64」の両方に入れてみられてはいかがでしょうか? 【2】-------------------- >当方の環境は、win764bit、エクセル2007です。 >OSが64bitだと無理なのでしょうか? ●unzip32.dllの利用について(64bit) http://okwave.jp/qa/q7267931.html に、 -- ここから引用 --------------------------------- 「64bit版のアプリケーションからDLLを使用する」場合には、64bit版のDLLが必要になります。 ですが、64bit OS でも「32bit版のアプリケーションから使う」場合に必要なのは32bit版のDLLです。 > Windows7(x64)では、動作している ということは、質問者さんが作っているのは32bitアプリケーションということですね。それなら今間のままでも問題ありません。 -- ここまで引用 --------------------------------- と出ていますので、OSではなくて、アプリケーション(Excel2007)の方の bit が問題のようです。 したがって、sfdasdfagweさんがお使いの Excel2007 が 32bit なら、【1】をお試しください。 Excel2007 が 32bit か 64bit かは、下記によりご確認ください。 1)[Alt] + [Ctrl] + [Delete] を押下して [Windows タスク マネージャ] を開きます。 2)[プロセス] タブ をクリックします。 3)[イメージ名] の列に表示されている「EXCEL.EXE」が「EXCEL.EXE」と表示されていれば 64bit、「EXCEL.EXE *32」と表示されていれば 32bit になります。 【3】-------------------- 前述のように「EXCEL.EXE *32」の場合は、dll のコピー先を移動(複写)するだけでイケるように思われますが、「EXCEL.EXE」、つまり 64bit だった場合は、 >「64bit版のアプリケーションからDLLを使用する」場合には、 >64bit版のDLLが必要になります。 とのことですので、「ZIP32J.DLL」・「zip32.dll」のそれぞれの 64bit版 が必要なのではないかと思われます。 名前だけみると「ZIP64J.DLL」・「zip64.dll」かなと思われますが、ザクッとググってみると、「zip64.dll」はあるようですが、「ZIP64J.DLL」の方がないようです。 ただ、 ●「ZIP64J.DLLが見つかりません」というエラーが出た場合の対処法 https://mobile.twitter.com/tomoyapp/statuses/167313539709681664 >.Pを押して圧縮ファイル名を入れるところでAlt-Zを押すと >圧縮用DLL切り替えが可能.7z.dllが入ってるなら,それを選べばOK. とのことで、「7z.dllが入ってるなら」イケるかも知れません。 http://www.google.co.jp/search?q=7z.dll+64bit #繰り返しますが、 #当方 64bit の Excel を持っておりませんので、検証はしておりません。
その他の回答 (1)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 私も、64bit PCでは試すことが出来ないし、細かい所は試していませんが、 http://okwave.jp/qa/q2405614.html そもそも、元のログは、「ファイル名取得」を複雑に書いたので意味が伝わらず、それ読んだ利用者が割愛したから、ファイル名が見つからないという話になったのだと思います。 >strCommand→-u test.zip test.xlsm(デスクトップにあります) test.xlsm で、デスクトップとは何でしょうか? 例えば、決め打ちで、「C:\Users\[User Name]\Desktop\test.xlsm」 とか、いうのではないでしょうか? >hWnd→0 それと、そもそも、元のコードは、Excel 2003以下でも利用させるものですから、 hWnd = FindWindow("XLMANI", Application.Caption)の、FindWindowはいらないですよね。 hWnd = Application.Hwnd で取れるはずです。FindWindowを使うかどうかは、どちらでも良い話ですが。 C:\WINDOWS\system32 に入れる・入れないはそんなに重要ではないと思います。 パスの通った所に、入れればよいだけの話です。ただ、反応が速いか遅いかの違いだと思います。
お礼
どうもありがとうございました。
お礼
どうもありがとうございました。