
質問させて下さい。
Lhaplus などを使用(導入)することなく、Windows7の標準機能のみでExcelファイルをZipファイルに圧縮する事は可能なのでしょうか?
マクロの動作としては、
1.作業中のBOOKから必要なシートのみをコピーし別BOOKとして保存
2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
3.別BOOKを削除
上の1.と3.は出来たのですが、
2.の圧縮についてが、理解できずにおります。
自分なりに調べたところ、Lhaplus をShell関数などで指定し圧縮をする方法などは紹介されていたのですが、Windows7の標準機能のみZip圧縮を行う事は可能なのでしょうか?
ご存知の方がいましたら、ご教授いただければ幸いです。
No.3ベストアンサー
- 回答日時:
こんにちは。
>2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
というのは、2007以降のOffice ファイルは、拡張子が変わっただけで、本来は、Zipファイルなのです。あえて、Zipで圧縮する必要があるか分かりませんが、アーカイブに格納ということで、やってみました。
#2さんのリンク先とは、仕組み自体は同じですが、
Set Shell = CreateObject("Shell.Application")
zFolder.CopyHere sFolderItem
で、ZIPフォルダが認識しないことでした。そこで、何度もやった結果、事前に参照設定することで解決しました。
'//
Sub Files2Zip()
Dim myPath As String
Dim ZipFName As String
Dim ZipFNameB As String
Dim FName As Variant
'要参照設定
'Microsoft Shell Controls and Automation
Dim objShell As Shell32.Shell 'レイトバインディングだと抜けがあります。
Dim ar As Variant, fn As String
Dim i As Long, j As Long, k As Long
myPath = ThisWorkbook.Path & "\" '任意の場合は、必ず末尾に¥を入れること
ZipFNameB = myPath & "MyFilesABC" ' & ".zip" "圧縮名
ZipFName = ZipFNameB & ".zip"
'一意の出力ファル名の決定
fn = Dir(ZipFName & ".zip")
Do Until fn = ""
k = k + 1
ZipFName = ZipFNameB & CStr(k) & ".zip"
fn = Dir()
Loop
FName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xl*), *.xl*", _
MultiSelect:=True, Title:="圧縮ファイル選択")
If IsArray(FName) = False Then
Exit Sub
Else
Open ZipFName For Output As #1
Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
Close #1
Set objShell = New Shell32.Shell
For i = LBound(FName) To UBound(FName)
If IsBookOpen(FName(i)) = False Then
'ファイルは必ず閉じた状態で使ってください 'ここで問題が発生することがある
objShell.Namespace(ZipFName).CopyHere FName(i)
Sleep 500
End If
Next i
End If
End Sub
Function IsBookOpen(ByVal FName As Variant)
Dim myFno As Integer
If Dir(FName) <> "" Then
myFno = FreeFile
On Error Resume Next
Open FName For Binary Lock Read Write As #myFno
Close #myFno
End If
If Err.Number = 70 Then
IsBookOpen = True
End If
End Function
'//
ありがとうございます。
また、お礼が非常に遅くなり申し訳ございませんでした。
上記コードで問題なくwin7Excel2007で実行できました。
Print など使用した事のないステートメントや、
アーリーバインディング・レイトバインディングの違い。sleepとwaitの違いについても不勉強でしたので、これも含めて勉強していきたいと思います。
本当にありがとうございました。
No.2
- 回答日時:
ありがとうございます。
また、お礼が非常に遅くなり申し訳ございませんでした。
この件だけでなく、これから学んでいきたい事が非常に多く掲載されており、
非常に参考になりました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
[VBA]標準機能のみでパス付zipファイルの解凍
Excel(エクセル)
-
VBA zipファイルの作成
その他(プログラミング・Web制作)
-
【ExcelVBA】zip圧縮されたCSVからシートに取り込む方法
Visual Basic(VBA)
-
-
4
Powershellでzip圧縮が出来ない
その他(プログラミング・Web制作)
-
5
ファイルをvbaで圧縮したいのですが
Excel(エクセル)
-
6
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
7
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
8
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
9
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
OUTLOOKのメールアカウントの受信フォルダーへVBAでアクセスするには。
Visual Basic(VBA)
-
12
unzip32.dllの利用について(64bit)
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
右クリック→新規作成→圧縮(zip...
-
圧縮ファイルを使用すると読み...
-
メールのアーカイブってどうい...
-
圧縮すると容量が増える。
-
WinRARで圧縮したzipは無圧縮で...
-
CDに焼くファイルをZIP圧縮して...
-
ファイル名が青文字になっている
-
ワードをCD-Rに保存するには?
-
フォルダ名や、ファイル名のフ...
-
outlook2003でフォ...
-
アーカイブファイルではありま...
-
ワードに貼り付けた写真容量を...
-
可逆圧縮のファイル形式のファ...
-
圧縮フォルダにパスワード保護...
-
免許証をPDFでメール送信
-
エクセル共有ファイルに保存し...
-
○○.7z.001~●●.7z.003という圧...
-
EXCELデータ保存時にメッセージ...
-
拡張子tif 印刷が出来ません
-
『.MD2』の画像ファイルを『.JP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
右クリック→新規作成→圧縮(zip...
-
メールのアーカイブってどうい...
-
CDに焼くファイルをZIP圧縮して...
-
フォルダやファイルを他人から...
-
メールにフォルダを添付したい!
-
圧縮すると容量が増える。
-
圧縮ファイルを使用すると読み...
-
Zip形式フォルダの解凍[不明な...
-
圧縮フォルダ(zip形式)を2重...
-
フォルダ名や、ファイル名のフ...
-
圧縮(ZIP形式)
-
【Excel VBA】Windowsの標準機...
-
会社のFuji Xeroxの複合機スキ...
-
アーカイブファイルではありま...
-
ファイル名に日本語が入ってい...
-
圧縮の容量が違う
-
至急。PCに詳しい人助けてくだ...
-
パソコンの圧縮データを元に戻...
-
outlookで個人用フォルダが適切...
-
JPGファイルが海外に送れません...
おすすめ情報