[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.