[[20170329234258]] 『zipファイルを任意のフォルダ内から全て解凍するマ』(楽) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『zipファイルを任意のフォルダ内から全て解凍するマクロでバグっています。』(楽)

任意のフォルダ内に複数のzipファイルがあり、それを解凍するマクロを作成中にエラーコード'91 オブジェクト変数またはwithブロック変数がありませんと出ます。
マクロ内容は下記です。
Function GetFolderPath() As String
Dim root_folder_path As String
With Application.FileDialog(msoFileDialogFolderPicker)

   If.show = True Then
     GetFolderPath = .slectedItems(1)
   End If
   If GetFolderPath = "" Then  
               End
  End If
End With
End Function
Sub 解凍()
Dim FSO As Objct
Set FSO =CreateObjEct("Scripting.FileSystemObject")
Dim fileObj As Object
Dim shellObj As Object
Dim zipObj As Variant
Dim ret As Long

 root_folder_path = GetFolderPath
 For Each fileObj In FSO.GetFolder(root_folder_path).files

  If FSO.GetextensionName(fileObj) = "zip" Then
  Set shellObj = CreateObject("Shell.Application")
  Set zipObj = shellObj.Namespace(fileObj.Path).Items
  Application.SendKey strpass & " {Enter}"
  ret = shellObj.Namespace(root_folder_path).CopyHere(zipObj)'ここがエラー
  End If
 Next fileObj
 Set FSO = Nothing
 Set shellObj = Nothing
 Set fileObj = Nothing
 set zipObj = Nothing

 If ret > 0 Then
 End If

End sub

解凍したcsvファイルを元のフォルダ内に入れようとして、失敗しました。
初心者で色々な方のデータを抜粋して変更していますが、
どなたかお分かりになる方がいらっしゃれば幸いです。
宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


本当にこれが現象再現できるコードですか? スペルミスが幾つかあって、そこまでたどり着かないうちにエラー出まくりですが。 また、SubとFuctionの2つに分けていますが、どちらも互いを呼んでいません。このままじゃまったく動きませんよ。変に切り貼りせず、書いたコードをそのままコピペしてください。

まずはコードの1行目(プロシジャより上)にOption Explicitを記述してください。「ツール」−「オプション」で、「自動構文チェック」にもチェックを付けておくこと。これが今後の貴方のための必須条件になります。(これをやらないと、無駄なデバッグを回答者に強いることになり、大変無礼な行為に繋がります)

あと不思議なのは、なんで解凍するだけなのに、SendKey しているのでしょう? 指定している変数は宣言も代入もされていないので、意図がさっぱり判りません。どこのコードを元にしたのかも書いてもらえると、助かります。
(???) 2017/03/30(木) 09:14


なんか無反応ですが、動くように書き換えた例を上げておきますね。

 Sub test()
    Dim FSO As Object
    Dim fileObj As Object
    Dim shellObj As Object
    Dim zipObj As Object
    Dim objDest As Object
    Dim root_folder_path As Variant

    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            root_folder_path = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set shellObj = CreateObject("Shell.Application")
    Set objDest = shellObj.Namespace(root_folder_path)

    For Each fileObj In FSO.GetFolder(root_folder_path).Files
        If FSO.GetextensionName(fileObj) = "zip" Then
            Set zipObj = shellObj.Namespace(fileObj.Path)
            objDest.CopyHere zipObj.Items
        End If
    Next fileObj
 End Sub
(???) 2017/03/30(木) 17:13

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.