ちくのう症(蓄膿症)は「菌」が原因!?

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

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

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

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

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

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

A 回答 (5件)

こんばんは。


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

>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
    • good
    • 1
この回答へのお礼

できました!
ありがとうございます。

SendKeysを使用するので、実際に処理に入る前にmsgboxで処理後のダイアログが出るまで触らないように注意を促したほうがよさそうですね。

いくつか質問があるのですが、
・僕の理解が浅くて申し訳ないのですが、処理ができたことを確認し、コードを紐解いてみたいのですが、DestFolderやobjShellなどの変数への代入あとSendKeysとなっているのですが、なぜこれで処理が可能なのかがわかりません。
直前のSet objZip = objShell.Namespace(fn).ItemsはobjZipにfnで指定したzipファイルの情報をItemsに取得しただけではないのでしょうか?

・変数objShellはobjectの宣言で問題ないでしょうか?

・変数retはCopyHereメソッドの戻り値(?)によってその後のifで処理を分岐させていることは理解できるのですが、retを使用する場合の宣言はlongでいいですか?
ちなみにretという変数をよく見るのですが、これはreturnか何かの略なんでしょうか?

お礼日時:2015/01/19 12:24

こんにちは。



>DestFolderやobjShellなどの変数への代入あとSendKeysとなっているのですが、なぜこれで処理が可能なのかがわかりません。
これらは、経験則のです。なぜかよく分かりませんが、論理的に逆にすると働くようです。
もしかしたら、バージョンの違いがあるかもしれませんし、将来は、変わるのかもしれませんが、ここ10年、そんな調子です。
たぶん、SendKeyとコードのタイミングの時間差なんだろうと思います。

うまくいかない時は、Win32 API関数を使えば確実です。
ただ、最近、ここの掲示板で書くぐらいで、ほとんど関数名を忘れてしまいました。

>直前のSet objZip = objShell.Namespace(fn).ItemsはobjZipにfnで指定したzipファイルの情報をItemsに取得しただけではないのでしょうか?
Items の中身をみると、そこにコマンドがありますから、そのコマンドを働かせるためのオブジェクトだと思っています。

>変数objShellはobjectの宣言で問題ないでしょうか?
抜けていましたね。元は入っていたのですが、掲示板に出す時に抜かしてしまいました。なお、他のObject に関しては、なるべく、Variant 型にしてください。

>retを使用する場合の宣言はlongでいいですか?
はい、その通りです。

>retという変数をよく見るのですが、これはreturnか何かの略なんでしょうか?
戻り値で、英語では、Return なのですね。他に、丸める(四捨五入)というのは、Roundなんです。これらは、英語から来ているようです。

なお、前回のzipfldr.dllは、圧縮ツール(expLzh)が邪魔をしていることが分かり、それをアンイントールして、もう一度やってみましたが、結局、圧縮フォルダの展開までで、その後の段階は手動になってしまうようです。もう少し詳しいことが分かれば使えるのかもしれません。
それにつけても、Unzip32.dllがあれば、と思いました。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

>なぜかよく分かりませんが、論理的に逆にすると働くようです。
そういうものなんですね。わかりました。

>なお、前回のzipfldr.dllは、圧縮ツール(expLzh)が邪魔をしていることが分かり、それをアンイントールして、もう一度やってみましたが、結局、圧縮フォルダの展開までで、その後の段階は手動になってしまうようです。
お手数おかけして申し訳ありません。
教えていただいたコードでも問題なく動きましたのでこれで大丈夫です。
おかげさまで長年の課題が一つ解決しました。

お礼日時:2015/01/20 10:03

こんにちは。



>(System32フォルダにUnzip32.dllがありませんでした。)
「Windows 7では、標準機能としてZIP形式やLZH形式のファイルを展開できます。」121.ware.com より

http://oshiete.goo.ne.jp/qa/7244081.html
やっとここで見つけました。
zipfldr.dll だということですね。
C:\Windows\winsxs\ 辺りにあることが分かりました。
検証しますから、少し、お待ちください。

>1つずつzipファイルを右クリック→展開
これは、まとめてUnzipするということでよいのですね。パスワードは同じですか?

なお、
>未インストールですが圧縮・解凍ソフトは唯一+Lhacaのみ認められているようです。
私自身、+Lhacaは、使わざるを得ない場合にのみ使わされる、と言って過言ではありません。そうでない時は、私自身は、あまり初心者用の解凍ツールは使いません。それをインストールすることにより、それに関する「縛り」が強くなるからです。慣れてしまえば良いのですが。

>+LhacaでもVBAでパス付きzipを解凍できませんでしょうか。
http://okwave.jp/qa/q8199975.html
ここの内容は、正直なところ、VBAとしては、あまり興味の沸かないコードだと思います。たぶん、ご質問者さんの、右クリックと差はありません。上記で書いたように、+Lhacaは初心者用のツールで、解凍ツール自体は統合されていたような気がしますから、あまりVBA/VB向きではないような気がします。やむを得ないというところでしょうか。

このベストアンサーの方は、定評のあるよく知られた人物で、私が仮に作っても、結果的には大きな違いはないはずです。

ついでに、その掲示板の質問者さんは、
「WinzipであればVBAとの親和性が高く、業務効率化に多大な貢献を与えるとして、」
言うほどのことはありませんね。(^^; 昔は、お金を払ってまで購入しましたし、私もその一人だったけれども、Lhaなどが出てきて、日本の圧縮事情の変わってしまいました。

また、返事つけます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>zipfldr.dll だということですね。
自信がなくて言えなかったんですが、やはりzipfldr.dllで圧縮・解凍処理をしてるんですね。
合っていてよかったです。

>これは、まとめてUnzipするということでよいのですね。パスワードは同じですか?
はい。パスワードは同一になります。
説明不足で恐縮なのですが、ひとつのフォルダにzipファイルが複数あるわけではなく、"MMDD"形式のフォルダが複数あり、その中にzipファイルが一つずつ入っている環境となっております。
GetOpenFilenameメソッドを使用していただいているのですが、for文で繰り返すのは自分でやってみたいと思っていますので、ひとまず単一のパス付きzipファイルを解凍するコードをご教示いただければありがたいです。
注文をつけるような形になり申し訳ありません。

>ついでに、その掲示板の質問者さんは、・・・
実はこの質問も僕なんです。
+LhacaとVBAを取り巻く環境が変わったのかもしれないと淡い期待を持って今回+Lhacaでできるか聞いてみました。
以前は(というか先月まで)XPを使用していたのですが、7に変わる変わるとずっと言われていたので、ベストアンサーの方へのお礼のコメントにあるように標準機能のみでパス付きzipの処理ができるか質問するのを待っていました(7に変わったあとまた同じ質問をしてしまうと回答者の方に申し訳ないと思ったので)
会社に提案した後に気づいたのですがwinzipはシェアウェアなんですね。
PCを使い始めたころからLhacaなどがあったので、そもそも圧縮・解凍ソフトを「お金を出して買う」という意識がありませんでした(^^;)

お礼日時:2015/01/18 16:33

#1の回答者です。


検索し、訂正してください。ほとんど重要ではない部分ですが、残骸やエラーを発生させるものです。

'   Debug.Print FileOpt 'コメントブロックにしておいてください。制作段階で監視するためだけです。
  Else
'   FileOpt = "-x " & Fn & " " & OFolder 'これはパスワードなしのものです。
   FileOpt = "-x -P" & mPSWD & " " & Fn & " " & OFolder
  End If
    • good
    • 0

こんばんは。



>アプリケーションのインストールが禁止されており、
>毎日複数のパスワード付zipファイルを手動で解凍して処理をしています。
System32 に、Unzip.dll ライブラリはあるということでしょうね。

以下は、複数のZIPファイルも選択して、それぞれを解凍することが可能です。

'//
'Option Explicit

Private Declare Function UnZip Lib "unzip32" (ByVal hWnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal wSize As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Const mPSWD As String = "111" 'パスワード

Sub ZipUnArchive()
 Dim FileNames As Variant
 Dim Fn As Variant
 Dim FileOpt As String
 Dim OFolder As String
 Dim hWnd As Long
 Dim ret As Long
 Dim sOutput As String * 2048
 Const SEP As String = "\"
 hWnd = FindWindow("XLMAIN", vbNullString)
 OFolder = "C:\Users\MyFolder\" '必ず、最後に「\」セパレータを入れること
 'OFolder = Mid(OFolder, 1, InStrRev(OFolder, "\") - 1) & SEP 'ブックの自フォルダ
 
 FileNames = Application.GetOpenFilename("ZIPファイル*.zip(*.zip),*.zip", MultiSelect:=True)
 If VarType(FileNames) = vbBoolean Then Exit Sub
 
 For Each Fn In FileNames
  
  If InStr(1, Fn, Space(1)) > 0 Then
   FileOpt = "-x -P" & mPSWD & " " & Chr(34) & Fn & Chr(34) & " " & Chr(34) & OFolder & Chr(34)
   Debug.Print FileOpt
  Else
   FileOpt = "-x " & Fn & " " & OFolder
  End If
  ret = UnZip(hWnd, FileOpt, sOutput, Len(sOutput))
  sOutput = Left(sOutput, InStr(sOutput, vbNullChar) - 1)
  If ret <> 0 Then
   MsgBox "エラーがあり解凍できませんでした。" & vbCrLf & sOutput, 48
  Else
   Fn = Dir(Fn)
   MsgBox OFolder & " に " & Fn & "は正常に解凍しました。"
  End If
 Next Fn
End Sub
'//

なお、FileOpt の空白値(スペース)に関して、何度やっても、エラーが出る場合は、ほとんど、その部分です。"My Document"のように空白値があるものは、さらに、Chr(34)で囲っているのですが、オプションの-x の後に空白値も、入れるようにしてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
こちらの書き方が悪かったのですが、
>毎日複数のパスワード付zipファイルを手動で解凍して処理をしています。
というのは1つずつzipファイルを右クリック→展開
で解凍処理をしています。

教えていただいたコードを実行いたしましたが、
>ret = UnZip(hWnd, FileOpt, sOutput, Len(sOutput))
の行で「実行時エラー'53': ファイルが見つかりません:unzip32」エラーが出てしまいます。(System32フォルダにUnzip32.dllがありませんでした。)

"C:\Program Files (x86)\Trend Micro\OfficeScan Client"にUNZIP.DLLがあるのですが、これは使用できますか?
また、情報が後出しになってしまい申し訳ないのですが、確認したところ、未インストールですが圧縮・解凍ソフトは唯一+Lhacaのみ認められているようです。
+LhacaでもVBAでパス付きzipを解凍できませんでしょうか。

お礼日時:2015/01/18 11:03

この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ファイルの作成

(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/vbazip_a144.html

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

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


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


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

(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)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思ってい...続きを読む

Aベストアンサー

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

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

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

-----------------------------
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" '圧縮書庫ファイルの絶...続きを読む

QWindows7 zip圧縮・解凍のコマンド

同様の質問があったらすみません。

OS Windos7 では、標準でzipファイルの圧縮・解凍ができるようですが、
この操作をcmd.exeを使って行いたいと考えています。

質問(1)
そのようなコマンドはありますか?

質問(2)
コマンドがあれば、教えてください。
または、参照できるホームページ等教えていただけませんか?

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

Aベストアンサー

> コマンドがあれば、教えてください。

Win7はzipfldr.dllで処理しています。
RouteTheCall パラメータはfilename.zipのサブフォルダに
filenameフォルダを作成して解凍ファイルを格納します。
filenameにはzipファイル名を指定してください。

rundll32.exe zipfldr.dll,RouteTheCall filename.zip

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

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

Aベストアンサー

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

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

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エクセル マクロで指定フォルダを開く

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

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

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

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qファイルコピーのスクリプトで上書き確認のダイアログが表示

Windows2003 Server にて、
ファイルコピーのスケジュールを登録しようと
下記のスクリプトを作りましたが、
実行すると「上書き確認」のダイアログが表示されてしまいます。
上書き確認のダイアログを表示させずに、
自動で上書きさせる方法を教えてください。
---------------------------------------------------
Set WshShell2 = WScript.CreateObject("Shell.Application")
Set oFolder=WshShell2.NameSpace(ToFolder)
oFolder.CopyHere FromFile, &h10
---------------------------------------------------
「WScript」を使っているのは、
コピーしている事が視覚的に分かりたいので、書類が飛んでいる表示をさせたいからです。

Aベストアンサー

oFolder.CopyHereの第二引数にFOF_NOCONFIRMATION(0x0010)を指定します。

http://homepage3.nifty.com/aya_js/wsh/wsh24.htm


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

このカテゴリの人気Q&Aランキング