
こんばんは。
他の方の質問ですが
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RMファイル
-
ZIPファイルがwordになります
-
ネットゲームのドラゴンネスト...
-
.cabファイルについて
-
起動時にBuilding DMI Poolと表...
-
ドライブドライバの自己解凍形...
-
MS-DOSゲームってどうやればで...
-
VBAを使ってファイルを圧縮したい
-
WinHlp32.exeのインストールに...
-
ダウンロード
-
Googleドライブにインターネッ...
-
勝手にショートカットのリンク...
-
ショートカットファイルが開け...
-
DVD-Rなのに再書き込みや削除が...
-
VBAでFormat がうまく使えない
-
数か所に同時保存する方法
-
jw cadの名前をつけて保存・・...
-
Ctr+F4キーで画面が消えた後....
-
フォルダを間違って削除しない...
-
Thunderbirdのプロファイルが読...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダウンロードしたファイルが開...
-
ZIPファイルがwordになります
-
急いでいます。XDWファイルの開...
-
表示はZIPファイルなのに「アー...
-
osはwindows7です。 cliborと...
-
Windows用に移植されたFM-TOWNS...
-
ドライバINFファイルがあるのに...
-
windows7でZIPファイルを開いて...
-
統合アーカイバDLLインストーラ...
-
Lhasaのインストールと実行
-
B's recorder GOLD10のダウンロ...
-
ダウンロードしたゲームが・・・
-
cubase、UR22Cを使用するにあた...
-
.cabファイルについて
-
急にパソコンの音が出ない!~...
-
Latexについて
-
Windows10グレードアップについて
-
spoolsv.exe
-
rpgツクールにいて
-
ドライブドライバの自己解凍形...
おすすめ情報