[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『zipの解凍』(しのみや)
https://officeforest.org/wp/2019/04/05/VBAでZIPの圧縮・解凍をやらせてみる のページの解凍をしてみるの記述をお借りしています。
'OS標準機能でzipファイルを解凍する関数
Public Function unzipman(ByVal filepath As Variant, ByVal meltpath As Variant) As Boolean
On Error GoTo Err_Handler
'指定のフォルダが存在するかチェック
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(meltpath) Then
Else
MkDir meltpath
End If
Set FSO = Nothing
'シェルを呼び出し
With CreateObject("Shell.Application")
.Namespace(meltpath).CopyHere .Namespace(filepath).Items
End With
'結果を返す
unzipman = True
Err_unzipman
unzipman = False
Exit Function
Err_Handler:
MsgBox Err.Description
Resume Exit_unzipman
End Function
'解凍呼び出しテスト
Function testmelting()
'変数の宣言
Dim filepath As Variant
Dim meltpath As Variant
Dim ret As Boolean
'ファイルのパスを格納
filepath = "ここにZIPファイルのパスを入れる"
meltpath = "ここに解凍先フォルダを入れる"
'ZIP解凍を実行
ret = unzipman(filepath, meltpath)
End Functio
コピペでは動かず、確認をしているところです
最後の行の End Functio ← End Functionにしました
実行してみたところ Err_unzipmanのところで、「SubまたはFunctionが定義されていません」のエラー (コメントにして進めてみたところ)
Resume Exit_unzipmanで、「行ラベルが定義されていません」のエラー (コメントにして進めたところ)
Filepathにあるzipファイルがmeltpathにそのままコピーされている様子です
上記のコメントにしなければエラーになった部分の動きがわからないので 何をしているのか教えて頂けませんか
あともうひとつなのですが、 .Namespace(meltpath).CopyHere .Namespace(filepath).Items この部分で、ファイルをコピーしているのはわかるのですが、 .Namespace(filepath).Items こちらは何をしているのでしょうか Namespace Itemsで検索してみてもうまく探せませんでした
< 使用 Excel:Excel2010、使用 OS:Windows10 >
こんにちは。
問題点その1 Err_Handlerの中で、Resume先がない。 typoだと思います。
問題点その2 このままだと、正常終了のときも、 unzipman = False の行を通るので、正常終了でもFalseが返る
上記2点について修正すると以下になります。 Resumeする必要ないと思いますけど、一応そのままにしました。
もう1点については、 https://docs.microsoft.com/ja-jp/windows/desktop/shell/shell-namespace
Public Function unzipman(ByVal filepath As Variant, ByVal meltpath As Variant) As Boolean
On Error GoTo Err_Handler
'指定のフォルダが存在するかチェック
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(meltpath) Then
Else
MkDir meltpath
End If
Set FSO = Nothing
'シェルを呼び出し
With CreateObject("Shell.Application")
.Namespace(meltpath).CopyHere .Namespace(filepath).Items
End With
'結果を返す
unzipman = True
Exit_unzipman: 'ここがちがっている。
Exit Function
Err_Handler:
MsgBox Err.Description
unzipman = False
Resume Exit_unzipman
End Function
'解凍呼び出しテスト
Function testmelting()
'変数の宣言
Dim filepath As Variant
Dim meltpath As Variant
Dim ret As Boolean
'ファイルのパスを格納
filepath = "ここにZIPファイルのパスを入れる"
meltpath = "ここに解凍先フォルダを入れる"
'ZIP解凍を実行
ret = unzipman(filepath, meltpath)
End Function
(でれすけ) 2019/06/26(水) 12:01
でれすけさんありがとうございます
頂いた記述で、エラーが出ないようになりました ありがとうございます
実行してみると、 解凍がされていないものが、コピーされている様子なのですが 何か変えないといけないのでしょうか
教えて頂いた https://docs.microsoft.com/ja-jp/windows/desktop/shell/shell-namespace を見に行って、
Private Sub fnShellNameSpaceVB()
Dim objShell As ShelL
Dim objFolder As Folder
Set objShell = New Shell
Set objFolder = objShell.NameSpace(ssfPERSONAL)
If (Not objFolder Is Nothing) Then
Debug.Print objFolder.Title
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub
の動きを確認しようと実行してみたのですが、
objShell As Shellの部分で「ユーザー定義型は定義されていません」となります
少しずつですが理解しようと思いますが、 よくわかっていなくて 検討違いなことをしているのかもしれません… (しのみや) 2019/06/26(水) 12:32
>何か変えないといけないのでしょうか
まさか、
filepath = "ここにZIPファイルのパスを入れる"
meltpath = "ここに解凍先フォルダを入れる"
ここも変えてないとか?
>objShell As Shellの部分で「ユーザー定義型は定義されていません」となります 参照設定で、 『Microsoft Shell Controls And Automation』 にチェックを入れてください。 (でれすけ) 2019/06/26(水) 15:08
filepath = "ここにZIPファイルのパスを入れる" meltpath = "ここに解凍先フォルダを入れる" 変えています。
変えたうえで実行してみると、 Filepathにあるzipファイルがmeltpathにzipのままコピーされている様子です
解凍をしたくてこの記述をお借りしているのですが、 実行結果を見るとコピーをしているだけ?何かおかしいのか?…と思っております
そこで、下の記述は 何をしているのだろうと質問させてもらったところ .Namespace(meltpath).CopyHere .Namespace(filepath).Items
https://docs.microsoft.com/ja-jp/windows/desktop/shell/shell-namespace このページをご紹介頂き、『Microsoft Shell Controls And Automation』の チェックを入れ実行はできました イミディエイトに「マイドキュメント」と出ました
解凍したいのですが、ハテナが増えていきます…
(しのみや) 2019/06/26(水) 15:27
>filepath = "ここにZIPファイルのパスを入れる" >meltpath = "ここに解凍先フォルダを入れる" >変えています。
どう変えているのか、記載してください。
自分のコードを隠したまま質問しては、こちらは想像で回答することになります。 時間の無駄です。
想像ですが、filepath にZipファイルだけが入っている フォルダのパスを指定していのではないかと思います。 Zipファイルのパスを拡張子までフルパスで指定してください。
>チェックを入れ実行はできました >イミディエイトに「マイドキュメント」と出ました そうですか。それで、質問はなんですか? (でれすけ) 2019/06/26(水) 17:02
パスが関係するとは思わず、 会社の情報が入っておりそのまま書けなかったため、記載しておりませんでした
おっしゃった >Zipファイルのパスを拡張子までフルパスで指定してください。 で解決できました
ありがとうございました
https://docs.microsoft.com/ja-jp/windows/desktop/shell/shell-namespace については、もう少し勉強したいと思います (しのみや) 2019/06/26(水) 17:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.