こんばんは。
他の方の質問ですが
http://oshiete1.goo.ne.jp/qa2405614.html
を参考にVBAでエクセルファイルの圧縮に挑戦しています。
しかしうまくいきません。
なのでご教授お願いします。
エクセルの標準モジュールに
下記のコードを載せました。
////////////////////////////////////////////////////////////////////////
'Option Explicit
Private Declare Function Zip Lib "Zip32j" (ByVal hWnd As Integer, ByVal szCmdLine As String, ByVal szOutPut As String, ByVal dwsize As Integer) As Integer
Private Declare Function FindWindow Lib "USER32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub testZip()
'Zip32 による圧縮
Dim Filename As String
Dim strArchiveName As String
Dim strCommand As String
Dim RC As Long
Dim hWnd As Long
Dim strOutPut As String * 512
Dim lngSize As Long
'ハンドル取得
hWnd = FindWindow("XLMANI", Application.Caption)
'ファイル名取得
Filename = myDeskTopPath & "\Book1.xls"
If Filename = "False" Then Exit Sub
Filename = Mid$(Filename, InStrRev(Filename, "\") + 1)
strArchiveName = Mid$(Filename, InStrRev(Filename, "\") + 1, InStrRev(Filename, ".") - InStrRev(Filename, "\") - 1) & ".zip"
strCommand = "-u " & strArchiveName & " " & Filename
lngSize = Len(strOutPut)
RC = Zip(hWnd, strCommand, strOutPut, lngSize)
'Debug.Print strOutPut
End Sub
Function myDeskTopPath()
' 実行時の デスクトップパス取得
Dim MyWSH As Object
Set MyWSH = CreateObject("WScript.Shell")
myDeskTopPath = MyWSH.SpecialFolders("Desktop")
Set MyWSH = Nothing
End Function
////////////////////////////////////////////////////////////////////////
そして「Zip32j 」がないので
http://www.vector.co.jp/soft/win95/util/se062163 …
からダウンロードしました。
しかし、
「 RC = Zip(hWnd, strCommand, strOutPut, lngSize)」
の部分で、
「ファイルが見つかりません。 (Error 53)」
になります。
ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。
ただこれをダウンロードしただけではダメなのでしょうか?
エラーの原因がわかりません。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんばんは。
そのコードの作者です。すでに、もうご指摘がありますが、
>ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。
まず、以下に二つのファイルがなくてはなりません。
C:\WINDOWS\system32\ZIP32J.DLL <--- 今回、ダウンロードしたファイル
C:\WINDOWS\system32\zip32.dll <---- Zip解凍用の本体
ここをお読みください。
http://www.csdinc.co.jp/archiver/lib/zip32j.html
Common Archiver Library: ZIP32J.DLL
'-------------------------------------------
'ファイル名取得
Filename = myDeskTopPath & "\Book1.xls"
別に決まった内容なら、特に、問題はありませんが、
Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
If Filename = "False" Then Exit Sub
この二行でセットになります。
後は、問題はないはずです。
Wendy02さん!ありがとうございます!!
早速zip32.dlもダウンロードして、C:\Windows\System32へ入れました。
そし同じように
Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
If Filename = "False" Then Exit Sub
でやってみたらエラーにならずに終了しました!!
確認したらちゃんと圧縮されています!
エクセルファイルで試してみても成功です!
Wendy02さん、mitarashiさん
本当にありがとうございます!
No.2
- 回答日時:
#1です。
Zip32jのマニュアルをみると、【インストール】
このZIP32J.DLLをWINDOWSのSYSTEMフォルダ(C:\WINDOWS\SYSTEMなど)にコピーしてください。
必要に応じて次のファイルもWINDOWSのSYSTEMフォルダにコピーしてください。
1.ZIP32.DLL(Ver2.3以降) - 絶対に必要
(後略)とあります。
乗りかかった船で、ZIA32.DLLと、ZIP32J.DLLを、今使っているPCはWindows2000なので、System32フォルダーにコピーして実行してみると、何も起こらず終了するので、
Debug.Print strOutPut
のコメントアウトを外してみると、
zip warning: name not matched: Book1.xls
zip warning: Book1.zip not found or empty
が表示されました。
ハンドル取得が、XLMANIになっているのに気付き、"XLMAIN"に直してみると、(これは、http://oshiete1.goo.ne.jp/qa2405614.htmlからそうなっています)
RC = Zip(hWnd, strCommand, strOutPut, lngSize)
のところでオーバーフローのエラーが発生しました。
元の質問への回答に、ショートファイルネーム云々の記述があったので、"C:\Book1.xls"で試験してみましたが、同様でした。
あとは、元の質問への回答者である、Wendy02さんのご出馬をお待ち下さい。
再度ありがとうございます!!!
私も同じ様にやってみたら、私も同様にオーバーフローしました。
しかしDebug.Print strOutPutを見てみると、何も表示されません。
ローカルウインドウで見ても同じなので、「strOutPut」の部分にカーソルを当ててみると、"・・・・・・・・・・・・・・・・・・・・・・"となっています。
うーん、難しいですね~
Wendy02さん、来てくれないかな~(わくわく)
No.1
- 回答日時:
Zip32jを使った事は無いので、一般論ですが、
1.Declare <中略> Lib "Zip32j"のところで、デスクトップの絶対パスを指定するか、
Lib "C:\Documents and Settings\?????\デスクトップ\?????.dll"
2.DLLをシステムフォルダーに放り込むか、
3.環境変数PATHを設定してやる
必要があると思います。
早速のご回答ありがとうございます。
1のやり方で
Declare Function Zip Lib "Zip32j"を
Declare Function Zip Lib "C:\Users\ユーザーアカウント名\Desktop\zip3j037\Zip32j"にしても質問時と同じエラーでしたが
Private Declare Function Zip Lib "C:\Users\ユーザーアカウント名\Desktop\zip3j037\Zip32j\ZIP32J.DLL"
にしたら、
「can't load ZIP32.DLL」
というエラーになりました。
2については
システムフォルダーとはどこのフォルダに入れればいいのでしょうか?
(無知ですいません)
3は、もっと難しそうです、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ZIPファイルがwordになります
-
ドライバINFファイルがあるのに...
-
acerのディスプレイ「G225HQL」...
-
.cabファイルについて
-
WinHlp32.exeのインストールに...
-
拡張子ppm!!
-
急いでいます。XDWファイルの開...
-
急にパソコンの音が出ない!~...
-
表示はZIPファイルなのに「アー...
-
Surface3Win10を使ったWindowsToGo
-
jw cadの名前をつけて保存・・...
-
Googleドライブにインターネッ...
-
ショートカットファイルが開け...
-
Web.Config 構成ファイルのエラー
-
シェルスクリプトでFTPの実行結...
-
VBAでFormat がうまく使えない
-
ACCESS VBAのOpenForm書き方
-
DVD-Rなのに再書き込みや削除が...
-
C:\\Users\\All Users がエク...
-
windows defenderで質問です。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ZIPファイルがwordになります
-
急いでいます。XDWファイルの開...
-
cubase、UR22Cを使用するにあた...
-
表示はZIPファイルなのに「アー...
-
拡張子{cab} の開き方
-
統合アーカイバDLLインストーラ...
-
VBAを使ってファイルを圧縮したい
-
ドライブドライバの自己解凍形...
-
zipファイルを自動解凍させない...
-
ドライバINFファイルがあるのに...
-
Windowsについてです iPadでWin...
-
windows7でZIPファイルを開いて...
-
Windows用に移植されたFM-TOWNS...
-
ダウンロードしたファイルが開...
-
osはwindows7です。 cliborと...
-
https://github.com/shteeve3d/...
-
環境変数について
-
スクリーンセイバーの起動
-
ISIS DRAWについて。
-
ネットワークアダプターのドラ...
おすすめ情報