Excel VBAでファイルやフォルダを圧縮する方法 削除


Message#2 2015年2月6日(金)00時48分
From: 手前味噌
↓ここのサイトからがっつり持ってきた回答。これでいいんじゃないか?
ttp://shiganaisenotes.blogspot.jp/2012/08/windowszip.html


Option Explicit


'圧縮対象のファイル、フォルダの数-1だけ配列確保
Dim files(0)

'配列に圧縮対象のパスを絶対パスで定義していく
files(0)="圧縮対象とするフォルダを絶対パスで記述"

'圧縮ルーチンの呼び出し。
'圧縮後のファイル名及びパスと圧縮対象が格納された配列を渡す。
Call MakeZip("圧縮後のファイル名を絶対パスで記述",files)

'ここから圧縮ルーチン
Sub MakeZip(Byval ZipPath, ByRef FileArray)

'変数定義
Dim sfo, app, file, num, zipFolder

'処理で使用するオブジェクトの初期化
Set sfo=CreateObject("Scripting.FileSystemObject")
Set app=CreateObject("Shell.Application")

'古い同名圧縮ファイルがあったら削除する。
If sfo.FileExists(ZipPath) = True Then
sfo.DeleteFile ZipPath
End If

'空のzipファイルを作成する
With sfo.CreateTextFile(ZipPath, True)
.Write "PK" & Chr(5) & Chr(6) & String(18,0)
.Close
End With

'新規作成したzipファイルへ圧縮対象をコピーする
num=0

'ZIPファイルのパスを変数に代入して、値(この場合はパス)に変化が
'ないようにする。
Set zipFolder=app.NameSpace(sfo.GetAbsolutePathName(ZipPath))
For Each file In FileArray
If CStr(file)<>"" Then
file = sfo.GetAbsolutePathName(file)

'Zipフォルダに圧縮対象のファイルをコピーする
zipFolder.CopyHere(file)

'ファイル数をカウントアップ
num=num+1
End If
Next

'すべての圧縮ファイルのコピーが終わるまで待つ。
Do Until zipFolder.Items().Count=num
Wscript.sleep 100
Loop

Set sfo = Nothing
Set app = Nothing

End Sub

上のメッセージを削除します。
よければパスワードを入力し、削除ボタンをクリックしてください。

パスワード:

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com