アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは。

他の方の質問ですが
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」はフォルダごとデスクトップに置いています。
ただこれをダウンロードしただけではダメなのでしょうか?
エラーの原因がわかりません。

よろしくお願いします。

A 回答 (3件)

Zip32jを使った事は無いので、一般論ですが、


1.Declare <中略> Lib "Zip32j"のところで、デスクトップの絶対パスを指定するか、
Lib "C:\Documents and Settings\?????\デスクトップ\?????.dll"
2.DLLをシステムフォルダーに放り込むか、
3.環境変数PATHを設定してやる
必要があると思います。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

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は、もっと難しそうです、、、

お礼日時:2009/07/25 20:29

#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さんのご出馬をお待ち下さい。
    • good
    • 0
この回答へのお礼

再度ありがとうございます!!!
私も同じ様にやってみたら、私も同様にオーバーフローしました。
しかしDebug.Print strOutPutを見てみると、何も表示されません。
ローカルウインドウで見ても同じなので、「strOutPut」の部分にカーソルを当ててみると、"・・・・・・・・・・・・・・・・・・・・・・"となっています。

うーん、難しいですね~
Wendy02さん、来てくれないかな~(わくわく)

お礼日時:2009/07/25 22:27

こんばんは。


そのコードの作者です。すでに、もうご指摘がありますが、

>ダウンロードした「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

この二行でセットになります。
後は、問題はないはずです。
    • good
    • 0
この回答へのお礼

Wendy02さん!ありがとうございます!!

早速zip32.dlもダウンロードして、C:\Windows\System32へ入れました。

そし同じように
Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
If Filename = "False" Then Exit Sub
でやってみたらエラーにならずに終了しました!!

確認したらちゃんと圧縮されています!
エクセルファイルで試してみても成功です!

Wendy02さん、mitarashiさん
本当にありがとうございます!

お礼日時:2009/07/25 22:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!