
質問させて下さい。
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ファイルの作成
その他(プログラミング・Web制作)
-
[VBA]標準機能のみでパス付zipファイルの解凍
Excel(エクセル)
-
【ExcelVBA】zip圧縮されたCSVからシートに取り込む方法
Visual Basic(VBA)
-
-
4
Powershellでzip圧縮が出来ない
その他(プログラミング・Web制作)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
8
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
9
VBAからファイルをzip化したい
Access(アクセス)
-
10
ファイルをvbaで圧縮したいのですが
Excel(エクセル)
-
11
ExcelでVBAを使用した際に、『パス名が無効です』とエラーになります。
Excel(エクセル)
-
12
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
13
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CDに焼くファイルをZIP圧縮して...
-
右クリック→新規作成→圧縮(zip...
-
フォルダ名や、ファイル名のフ...
-
圧縮すると容量が増える。
-
メールのアーカイブってどうい...
-
圧縮フォルダ(zip形式)を2重...
-
メールにフォルダを添付したい!
-
JPGファイルが海外に送れません...
-
圧縮ファイルを使用すると読み...
-
zipにパスワードをかけられない...
-
ファイル名に日本語が入ってい...
-
フォルダやファイルを他人から...
-
OSが占める、ハードディスク...
-
右クリック フォルダ圧縮 圧縮...
-
圧縮(ZIP形式)
-
$マークのついたフォルダー
-
【Excel VBA】Windowsの標準機...
-
圧縮の容量が違う
-
パソコンの圧縮データを元に戻...
-
ゲームの録画データをHDDに保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
右クリック→新規作成→圧縮(zip...
-
メールのアーカイブってどうい...
-
圧縮すると容量が増える。
-
メールにフォルダを添付したい!
-
CDに焼くファイルをZIP圧縮して...
-
圧縮フォルダ(zip形式)を2重...
-
フォルダやファイルを他人から...
-
圧縮ファイルを使用すると読み...
-
Zip形式フォルダの解凍[不明な...
-
フォルダ名や、ファイル名のフ...
-
圧縮(ZIP形式)
-
至急。PCに詳しい人助けてくだ...
-
ファイルの名前に色を付ける方法
-
【Excel VBA】Windowsの標準機...
-
zipにパスワードをかけられない...
-
ファイル名に日本語が入ってい...
-
USBメモリの正しいつかいかた
-
圧縮の容量が違う
-
圧縮フォルダにパスワード保護...
-
圧縮ファイル解像について
おすすめ情報