
質問させて下さい。
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で質問しましょう!
似たような質問が見つかりました
- ノートパソコン パソコンでmp4の動画ファイルを10個くらい(合計20GB)をフォルダに入れて、容量を軽くしてしまお 2 2023/02/06 02:08
- iPhone(アイフォーン) iPhone ファイル iPhoneのファイルで写真をzipに圧縮した後もう一度展開すると画質は変わ 3 2022/10/21 21:53
- Windows 8 メール送信、zipファイル PDFについて 回答お願いいたします。 Windows8 メールはサクラ 1 2022/05/12 17:49
- 画像編集・動画編集・音楽編集 連続質問です 動画ファイルの圧縮時のビットレートというのについて教えてください 2 2023/08/06 11:50
- PDF PDFファイルの圧縮 1 2022/10/04 13:48
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Android(アンドロイド) androidでzip圧縮してから転送できるファイラー 3 2022/12/11 10:22
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- その他(セキュリティ) PDFファイルのパスワード設定について 1 2022/06/25 10:10
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
このQ&Aを見た人はこんなQ&Aも見ています
-
[VBA]標準機能のみでパス付zipファイルの解凍
Excel(エクセル)
-
VBA zipファイルの作成
その他(プログラミング・Web制作)
-
【ExcelVBA】zip圧縮されたCSVからシートに取り込む方法
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
Powershellでzip圧縮が出来ない
その他(プログラミング・Web制作)
-
6
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
7
VBAからファイルをzip化したい
Access(アクセス)
-
8
エクセルからアクセスにインポートすると、エラーが出てしまいます。原因を教えていただけませんか。
Access(アクセス)
-
9
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
10
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
11
指定したシート名以外を非表示にするには?VBA
Excel(エクセル)
-
12
ファイルをvbaで圧縮したいのですが
Excel(エクセル)
-
13
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
14
お助けください!VBAのファイル名エラーについて
Visual Basic(VBA)
-
15
Excelシート上のオプションボタンを監視
Excel(エクセル)
-
16
VBAにて読み込みが出来ない環境依存文字 ㉖ の文字コードを教えて下さい。
Excel(エクセル)
-
17
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
右クリック→新規作成→圧縮(zip...
-
メールのアーカイブってどうい...
-
【Excel VBA】Windowsの標準機...
-
圧縮フォルダ(zip形式)を2重...
-
メールにフォルダを添付したい!
-
ファイルの名前に色を付ける方法
-
パソコンの圧縮データを元に戻...
-
ディスク圧縮でスピードは速く...
-
フォルダ名や、ファイル名のフ...
-
zipにパスワードをかけられない...
-
アーカイブファイルではありま...
-
圧縮ファイルを使用すると読み...
-
圧縮すると容量が増える。
-
タスクスケジューラによるファ...
-
テキストデータと画像を一つの...
-
大量のデータを送りたいのです...
-
System Volume Informationにつて
-
フォルダやファイルを他人から...
-
メールに添付する写真や書類の...
-
圧縮ファイルを全て元に戻す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
右クリック→新規作成→圧縮(zip...
-
メールのアーカイブってどうい...
-
メールにフォルダを添付したい!
-
CDに焼くファイルをZIP圧縮して...
-
圧縮ファイルを使用すると読み...
-
フォルダやファイルを他人から...
-
圧縮フォルダ(zip形式)を2重...
-
圧縮すると容量が増える。
-
フォルダ名や、ファイル名のフ...
-
圧縮(ZIP形式)
-
ファイル名に日本語が入ってい...
-
zipにパスワードをかけられない...
-
【Excel VBA】Windowsの標準機...
-
ファイルの名前に色を付ける方法
-
至急。PCに詳しい人助けてくだ...
-
Zip形式フォルダの解凍[不明な...
-
パソコンの圧縮データを元に戻...
-
アーカイブファイルではありま...
-
500GBのUSBが欲しいのですが曲...
-
圧縮の容量が違う
おすすめ情報