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

エクセルVBAにより、外部にあるファイル(テキストファイル)をzip圧縮したいのですが、何か方法は無いものでしょうか。

先人の知恵をお貸しいただければ大変助かります。

A 回答 (3件)

こんにちは。



Google 検索もしてみましたが、Excel VBAでは、あまり良いものがないようですね。あくまでも、VBAの処理ですから、それはそれなりにしたほうがよいですね。

Zip32j が必要です。
http://www.vector.co.jp/soft/win95/util/se062163 …

当然、Zip32.dll は入っているものと見なします。なお、以下は簡易な方法です。

ただ、ファイルネームが、ショートネームしか受けないようなので、そのまま、GetOpenFilename ダイアログでは、ロングネームで、Zip32側が、エラーを起こしてしまいます。

もし、本格的にお使いになるのなら、実際には、Shell.Application のショートネームプロパティなどをお使いになるとよいでしょう。

うまくいかなかったら、Debug.Print のコメント・ブロックを外して、イミディエイトウィンドウで、その内容を確認してください。

それから、詳しいコマンドは、Zip32jの中の、CMD_ZIP.TXT を確認してください。一番、コマンドの説明が分かりやすいです。

'標準モジュール
'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 = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
 
 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
    • good
    • 1
この回答へのお礼

これぞまさに求めていたものでした。取り急ぎNo.2のリンク先のVBSで対処しましたが、非常に参考になりました。どうもありがとうございました。

お礼日時:2006/09/14 14:43

こちらも参考に



参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1390610
    • good
    • 0
この回答へのお礼

失礼しました、(同一ではないものの)類似の質問があったようです。取り急ぎVBSで対処しました。ありがとうございました。

お礼日時:2006/09/14 14:39

コマンドラインの使えるzip圧縮ができるプログラムをインストールし、Shell関数でそのプログラムにテキストファイルパスを渡して実行します。

    • good
    • 0
この回答へのお礼

なるほど、おっしゃるとおりでした。取り急ぎNo2のほうのリンクのVBSをコマンドラインから実行することで用を足しました。ありがとうございました。

お礼日時:2006/09/14 14:41

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