アレルギー対策、自宅でできる効果的な方法とは?

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver.14


(2)やりたいこと
3つのファイルのzipファイルを同じフォルダに作成したい
  C:\temp\a.txt
  C:\temp\b.txt
  C:\temp\c.txt
  から
  C:\temp\d.zip
  を作りたい。


(3)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思っています。

 参考①VBAでZIP圧縮する。
 http://scripting.cocolog-nifty.com/blog/2007/11/ …

 参考②ファイル/フォルダをzipファイルに圧縮
 http://qiita.com/kou_tana77/items/72346c69107fab …

定義、ループ、分岐など基本的なことは分かっています。
APIやFSOなども詳しくはないですが、知っています。
たとえば①の「fso.*******」、「Shell.*******」などの、*******が分かりません。


(4)質問事項
余計なものは除いて必要最低限のコードだけにするとどのようになるかしりたいです。
※エラー処理などに関しては使用環境にあわせて作成します。


ご存じの方ご教示くださいm(_ _)m

質問者からの補足コメント

  • ありがとうございます。
    ここに掲載するときは見やすいように外しちゃいましたが、実際は上記の待つ作業ないとエラーになりました。

    回答いただいたマクロをもとに実用箇所にアレンジすることができました。
    ありがとうございました^_^

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/01/26 20:23

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんな感じでしょうか?


・既に圧縮書庫ファイルが存在する場合は上書きされます。
・指定した被圧縮ファイルが存在しなかった場合はハングアップします。

-----------------------------
Sub MakeZip()
Dim sfo As Object, app As Object
Set sfo = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")

Dim zipFolder As Object
Dim file As Variant
Dim count As Long

Const zipFile = "C:\excel\圧縮.zip" '圧縮書庫ファイルの絶対パス
Dim files As Variant
files = Array("C:\excel\あ.txt" _
, "C:\excel\い.txt" _
, "C:\excel\う.txt") ' 圧縮するファイルの絶対パス

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

'zipファイルに圧縮対象のファイルをコピーする
count = 0
For Each file In files
count = count + 1
zipFolder.CopyHere (sfo.GetAbsolutePathName(CStr(file)))
'このファイルのコピーが終わるまで待つ。
Do Until zipFolder.Items().count = count
Application.Wait Now + TimeSerial(0, 0, 1)
Loop
Next
Set sfo = Nothing
Set app = Nothing
Set zipFolder = Nothing
End Sub
    • good
    • 2
この回答へのお礼

ありがとうございます。
必要な分のみを書き出すと、
-----------------------------
 '空のzipファイルを作成する
 With sfo.CreateTextFile("C:\temp\d.zip", True)
  .Write "PK" & Chr(5) & Chr(6) & String(18, 0)
  .Close
 End With
 Set zip = app.Namespace(sfo.GetAbsolutePathName("C:\temp\d.zip"))
 '作成したzipファイルにファイルをコピー
 zip.CopyHere (sfo.GetAbsolutePathName("C:\temp\a.txt"))
 zip.CopyHere (sfo.GetAbsolutePathName("C:\temp\b.txt"))
 zip.CopyHere (sfo.GetAbsolutePathName("C:\temp\c.txt"))
-----------------------------
ということですね!
とてもシンプルになり、これでいろいろアレンジして使用できます。
ベストアンサーにしたいのですが、ついでに
.Write "PK" & Chr(5) & Chr(6) & String(18, 0)
は何をしているのかも教えていただけないでしょうか?

お礼日時:2016/01/26 13:05

No.1です。



> .Write "PK" & Chr(5) & Chr(6) & String(18, 0)
> は何をしているのかも教えていただけないでしょうか?

ZIPファイルの終端レコードを示すデータを新規作成したファイルに書き込んでいます。
これにより作成したファイルが「空のZIPファイル」と認識されるようになります。


あと気になったのですが
お礼をいただいた中のソースにファイル一つずつのコピー(圧縮)終了を待つ記述(下記)がありません。
この記述が無いとZIPファイルに複数の被圧縮ファイルを追加する際に取りこぼしが生じる可能性があります。


count = 0
For Each file In files
count = count + 1
zipFolder.CopyHere (sfo.GetAbsolutePathName(CStr(file)))
'このファイルのコピーが終わるまで待つ。
Do Until zipFolder.Items().count = count
Application.Wait Now + TimeSerial(0, 0, 1)
Loop
Next
この回答への補足あり
    • good
    • 2
この回答へのお礼

今携帯から投稿していて、サイトがかなり使いづらく補足というところに記入してしまいました。

本当はここに記載する内容でした。
ありがとうございました。、

お礼日時:2016/01/26 20:26

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【Excel VBA】Windowsの標準機能のみでExcelファイルをZIPファイルに圧縮する方法

質問させて下さい。

Lhaplus などを使用(導入)することなく、Windows7の標準機能のみでExcelファイルをZipファイルに圧縮する事は可能なのでしょうか?

マクロの動作としては、
1.作業中のBOOKから必要なシートのみをコピーし別BOOKとして保存
2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
3.別BOOKを削除

上の1.と3.は出来たのですが、
2.の圧縮についてが、理解できずにおります。
自分なりに調べたところ、Lhaplus をShell関数などで指定し圧縮をする方法などは紹介されていたのですが、Windows7の標準機能のみZip圧縮を行う事は可能なのでしょうか?

ご存知の方がいましたら、ご教授いただければ幸いです。

Aベストアンサー

こんにちは。

>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
'//

こんにちは。

>2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
というのは、2007以降のOffice ファイルは、拡張子が変わっただけで、本来は、Zipファイルなのです。あえて、Zipで圧縮する必要があるか分かりませんが、アーカイブに格納ということで、やってみました。

#2さんのリンク先とは、仕組み自体は同じですが、
Set Shell = CreateObject("Shell.Application")
zFolder.CopyHere sFolderItem
で、ZIPフォルダが認識しないことでした。そこで、何度もやった結果、事前に参照...続きを読む

QVBAからファイルをzip化したい

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

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

Aベストアンサー

こんにちは。

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

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

当然、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

こんにちは。

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

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

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

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

Q[VBA]標準機能のみでパス付zipファイルの解凍

いつもこちらの識者の皆様にはお世話になっております。
VBAのことで質問させてください。

環境はwindows7 Pro
Excel2010(14.0.7128.5000) 32bit
です。

掲題のとおり、パスワード付のzipファイルを解凍しいたいのですが、調べてもやり方が分からず困っています。

■やりたいこと
外部アプリケーションを使わずにWindows7の標準機能のみで"C:\aaa\bbb.zip"をパスワード"111"で解凍する

会社で使っているのですが、アプリケーションのインストールが禁止されており、
毎日複数のパスワード付zipファイルを手動で解凍して処理をしています。
効率を考えVBAで処理したいのですが、どなたか上記内容の場合どのようなコードが適しているか
教えていただけませんでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんばんは。
>>ついでに、その掲示板の質問者さんは、・・・
>実はこの質問も僕なんです。
失礼しました。気が付きませんでした。(^^;

>zipfldr.dllで圧縮・解凍処理をしてるんですね。
これが、私には使いこなせなかったのです。それで、試行錯誤の上、結局、Shell.Application で任せてしまいました。(おそらく、古い環境では動きません)

>ひとまず単一のパス付きzipファイルを解凍するコードをご教示いただければありがたいです。
実に、へんてこなコードですが、試してみてください。こちらの環境ではうまくいきましたが、他人の環境では、失敗する可能性が結構あります。Sendkeyは、Win32 API関数の方が確実ですが、仰々しくなってしまいます。


'//
Sub OneZipExtract()
 Dim fn As Variant
 Dim DestFolder As Variant
 Dim objZip As Variant
 '出来る限り、VBEditor は閉じていたほうがSendkeyの誤動作から免れます。
 Const PSWD As String = "000" 'パスワード
 DestFolder = "C:\aaa\" '展開フォルダ 末尾は、¥(セパレータ)を置くようにしてください。
 
' fn = Application.GetOpenFilename("ZIPファイル*.zip(*.zip),*.zip")
' If VarType(fn) = vbBoolean Then Exit Sub
 fn ="C:\aaa\bbb.zip"  'キメウチ・ファイル名
 ' DestFolder = Mid(fn, 1, InStrRev(fn, "\")) '展開ファルダが、ZIPファイルのある場所の場合
 Set objShell = CreateObject("Shell.Application")
 Set objZip = objShell.Namespace(fn).Items
 Application.SendKeys PSWD & "{Enter}"
 objShell.Namespace(DestFolder).CopyHere (objZip) '*
 Set objShell = Nothing
End Sub
'//

*確実にZIPファイルが展開できたかは、このようにすると良いです。
 ret = objShell.Namespace(DestFolder).CopyHere(objZip)
 If ret > 0 Then
   MsgBox "失敗しました。", 48
 End If

こんばんは。
>>ついでに、その掲示板の質問者さんは、・・・
>実はこの質問も僕なんです。
失礼しました。気が付きませんでした。(^^;

>zipfldr.dllで圧縮・解凍処理をしてるんですね。
これが、私には使いこなせなかったのです。それで、試行錯誤の上、結局、Shell.Application で任せてしまいました。(おそらく、古い環境では動きません)

>ひとまず単一のパス付きzipファイルを解凍するコードをご教示いただければありがたいです。
実に、へんてこなコードですが、試してみてください。こちらの環境ではうま...続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBAを使ってファイルを圧縮したい

こんばんは。

他の方の質問ですが
http://oshiete1.goo.ne.jp/qa2405614.html
を参考にVBAでエクセルファイルの圧縮に挑戦しています。

しかしうまくいきません。
なのでご教授お願いします。

エクセルの標準モジュールに
下記のコードを載せました。

////////////////////////////////////////////////////////////////////////
'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 = myDeskTopPath & "\Book1.xls"

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


Function myDeskTopPath()
' 実行時の デスクトップパス取得
Dim MyWSH As Object
Set MyWSH = CreateObject("WScript.Shell")
myDeskTopPath = MyWSH.SpecialFolders("Desktop")
Set MyWSH = Nothing
End Function
////////////////////////////////////////////////////////////////////////

そして「Zip32j 」がないので
http://www.vector.co.jp/soft/win95/util/se062163.html
からダウンロードしました。

しかし、
「 RC = Zip(hWnd, strCommand, strOutPut, lngSize)」
の部分で、
「ファイルが見つかりません。 (Error 53)」
になります。

ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。
ただこれをダウンロードしただけではダメなのでしょうか?
エラーの原因がわかりません。

よろしくお願いします。

こんばんは。

他の方の質問ですが
http://oshiete1.goo.ne.jp/qa2405614.html
を参考にVBAでエクセルファイルの圧縮に挑戦しています。

しかしうまくいきません。
なのでご教授お願いします。

エクセルの標準モジュールに
下記のコードを載せました。

////////////////////////////////////////////////////////////////////////
'Option Explicit
Private Declare Function Zip Lib "Zip32j" (ByVal hWnd As Integer, ByVal szCmdLine As String, ByVal szOutPut As String, ByVal dwsize A...続きを読む

Aベストアンサー

こんばんは。
そのコードの作者です。すでに、もうご指摘がありますが、

>ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。

まず、以下に二つのファイルがなくてはなりません。

C:\WINDOWS\system32\ZIP32J.DLL <--- 今回、ダウンロードしたファイル
C:\WINDOWS\system32\zip32.dll <---- Zip解凍用の本体

ここをお読みください。
http://www.csdinc.co.jp/archiver/lib/zip32j.html
Common Archiver Library: ZIP32J.DLL

'-------------------------------------------
'ファイル名取得
Filename = myDeskTopPath & "\Book1.xls"

別に決まった内容なら、特に、問題はありませんが、

Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
If Filename = "False" Then Exit Sub

この二行でセットになります。
後は、問題はないはずです。

こんばんは。
そのコードの作者です。すでに、もうご指摘がありますが、

>ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。

まず、以下に二つのファイルがなくてはなりません。

C:\WINDOWS\system32\ZIP32J.DLL <--- 今回、ダウンロードしたファイル
C:\WINDOWS\system32\zip32.dll <---- Zip解凍用の本体

ここをお読みください。
http://www.csdinc.co.jp/archiver/lib/zip32j.html
Common Archiver Library: ZIP32J.DLL

'-------------------------------------...続きを読む

QZIPファイルの作成をコマンドから行いたい

Windows2003やXPでは、ファイルの右クリック→圧縮で
ZIPファイルを作成することが可能ですが、
これをコマンドから実行することは可能なのでしょうか?
可能ならば、どう書けばよいでしょうか…。

よろしくお願いいたします。

Aベストアンサー

> これをコマンドから実行することは可能なのでしょうか?

標準のコマンドは存在しませんから、既存のDOSやWindowsで使われていたのと同じく、それ用のコマンドをダウンロードして使用します。

はてな - WindowsのコマンドラインやバッチファイルでlLZHやZIPファイルの展開を行いたいのですが、
Http://www.hatena.ne.jp/1105496465
(直接リンクは切っておきます)

などを参考に、LZH形式の例ですと、

LHA32
http://www.vector.co.jp/soft/win95/util/se347175.html

をダウンロード、D:\に展開します。

以下のように打ち込んで圧縮を行います。

D:\>lha32 a test.lzh README.1ST


ダウンロードしたものにreadmeやヘルプコマンドがあるハズなので、そちらを参考にして下さい。

--
あるいは、Lhacaなどはコマンドラインからの引数を受け付けています。

| ●圧縮
| C:¥Program Files¥Lhaca>Lhaca.exe ”c:¥icons”

この辺はソフト次第ですし、Lhacaにしても上の操作はサポート外だったハズ。

> これをコマンドから実行することは可能なのでしょうか?

標準のコマンドは存在しませんから、既存のDOSやWindowsで使われていたのと同じく、それ用のコマンドをダウンロードして使用します。

はてな - WindowsのコマンドラインやバッチファイルでlLZHやZIPファイルの展開を行いたいのですが、
Http://www.hatena.ne.jp/1105496465
(直接リンクは切っておきます)

などを参考に、LZH形式の例ですと、

LHA32
http://www.vector.co.jp/soft/win95/util/se347175.html

をダウンロード、D:\に展開...続きを読む

QShell.ApplicationのNameSpaceを書き換えたい

こんばんは、みなさん。

少し前に以下の質問でプログラムを作っていただいたのですが、
WindowsXPだとうまく動くのに、Windows2000だとうまく動作しません。

http://question.woman.excite.co.jp/kotaeru.php3?qid=2006207

具体的には、「ZIP作成メイン」【CreateZIP(p_strZipName, p_colParams)】関数の以下の部分で、
オブジェクト実行エラーで引数の指定が間違っているとか何かのエラーが表示されました。

'書庫オブジェクトを取得する
Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))

XPではうまく動いているので、おそらくはVBScriptのインタプリタ側に
何らかの違いがあるようです。
この構文の代わりに有効なコードを書きたいと思います。

よろしくお願いします。

Aベストアンサー

どうも10500YEN(←よく見てね)です。

>ZIPに関連しない部分だけ抜き出したサンプルでも
>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
いいえ、ここがそのOSでZIPを扱えるかどうかの、一番の要です。


WIN2000環境で
(1)ZIPFLDR.DLLをレジストリ登録しましたか?
(2)それによって、エクスプローラで書庫ファイルの一覧が表示できるようになりましたか?

それができなければ、ネームスペースとしてのオブジェクトを取得は無理です。
2000環境を潰したので、私のところでの実験はできません。
以前、#5にて発言した内容について、onoohnoさんがどのような対応をしたのでしょうか?

それがわかると、無理かどうかもはっきり発言できるのですが、
今の段階では、まずは#5の発言で示した内容を行動してみてくださいとしか
言えません。。。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報