フリー写真素材ぱくたそ
あまりに苦労したので、覚書。
IE利用のツールにログインして、
遷移したページで一括ダウンロードしたファイルを解凍して、
各々のエクセルファイルからIDを抜き出して、
Accessに入っているデータと結び付けて、
また別のIDのフォルダに格納するコードを書いていたのだが、
意外なところでつまづいた。
コマンドラインでパスワードをつけて圧縮するやり方があるのは知っていたが、
解凍ができないのは知らなかった。
まあ、なんとなくセキュリティとかの観点でわからないでもないが、
解凍を自動でできないと、
色々な自動化でつまづくのよ、実際。
で、とりあえずネットで検索。
すぐ出てくるのがこのタイプ。
Set zipObj = shellObj.Namespace(fileObj.Path).Items
Application.SendKeys strPass & "{Enter}"
ret = shellObj.Namespace("C:").CopyHere(zipObj)
標準機能でSendkeys利用のこのタイプ。
最初は普通に解凍できたので、
いいやこれで、とか思ってたら、
ある日から、何度やってもエクセルに「予期しないエラー」が出てしまう結果に。
埒が明かないので、コードを変更。
とりあえず、Lhaplusをコマンドラインから実行させるコードにする。
Shell ("C:\Program Files\Lhaplus\Lhaplus.exe /o:C: C:\zipFile\" & honjitu & "\" & fileObj.Name)
ただやはり、PWが入れられない。
コマンド使って、Sendkeys使っているコードも見つからない。
試行錯誤して書く。
Sub Zip解凍()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクトの作成
Dim fileObj As Object
'本日の日付をyyyymmdd形式にする
Dim honjitu As String
honjitu = Format(Date, "yyyymmdd")
'フォルダ内の全てのファイルを調べる
For Each fileObj In fso.GetFolder("C:\zipFile\" & honjitu).Files
'拡張子のチェック
If fso.GetextensionName(fileObj) = "zip" Then
' Lhaplusのコマンド方法
SendKeys "pass" & "{Enter}",True
Sleep (2000)
Shell ("C:\Program Files\Lhaplus\Lhaplus.exe /o:C: C:\zipFile\" & honjitu & "\" & fileObj.Name)
Sleep (5000)
End If
Next fileObj
'後処理
Set fso = Nothing
Set fileObj = Nothing
End Sub
ただ、どうしても最後のファイルだけ、パスワードを入れるボックスが出た時点で終わる。(解凍されない)
ここから、
改めてSendkeysを調べると、
「False (既定値) の場合は、キーが送信された直後のプロシージャに制御が戻されます。 True の場合、キーボード操作は制御がプロシージャに戻される前に処理されている必要があります。」
と書いてあったので、
もしかしてFalse?と思い、
[,True]を削除。
SendKeys "pass" & "{Enter}",True
↓
SendKeys "pass" & "{Enter}"
DoEventsで戻すと書いてあったので、End Ifの前と後ろにDoEvents
途中で、End Ifのあとはいらないんじゃないかと思って、
消したら動かなかったので、訳わかってないけど、両方にしている。
Sleep (5000)
End If
Next fileObj
↓
Sleep (5000)
DoEvents
End If
DoEvents
Next fileObj
今のところ、安定して動いている。
(上のコードの赤い部分を下の青いコードに取り換えた)
おそらく、
環境に左右されるので、
Sleepの秒数とかは変えてみて、しっくりくる秒数にしてください。
あと、Format関数はAccessしか使えません。
ExcelやVBSの時は使えませんので、他の方法に直してください。
あまりに苦労したので、覚書。
IE利用のツールにログインして、
遷移したページで一括ダウンロードしたファイルを解凍して、
各々のエクセルファイルからIDを抜き出して、
Accessに入っているデータと結び付けて、
また別のIDのフォルダに格納するコードを書いていたのだが、
意外なところでつまづいた。
コマンドラインでパスワードをつけて圧縮するやり方があるのは知っていたが、
解凍ができないのは知らなかった。
まあ、なんとなくセキュリティとかの観点でわからないでもないが、
解凍を自動でできないと、
色々な自動化でつまづくのよ、実際。
で、とりあえずネットで検索。
すぐ出てくるのがこのタイプ。
Set zipObj = shellObj.Namespace(fileObj.Path).Items
Application.SendKeys strPass & "{Enter}"
ret = shellObj.Namespace("C:").CopyHere(zipObj)
標準機能でSendkeys利用のこのタイプ。
最初は普通に解凍できたので、
いいやこれで、とか思ってたら、
ある日から、何度やってもエクセルに「予期しないエラー」が出てしまう結果に。
埒が明かないので、コードを変更。
とりあえず、Lhaplusをコマンドラインから実行させるコードにする。
Shell ("C:\Program Files\Lhaplus\Lhaplus.exe /o:C: C:\zipFile\" & honjitu & "\" & fileObj.Name)
ただやはり、PWが入れられない。
コマンド使って、Sendkeys使っているコードも見つからない。
試行錯誤して書く。
Sub Zip解凍()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクトの作成
Dim fileObj As Object
'本日の日付をyyyymmdd形式にする
Dim honjitu As String
honjitu = Format(Date, "yyyymmdd")
'フォルダ内の全てのファイルを調べる
For Each fileObj In fso.GetFolder("C:\zipFile\" & honjitu).Files
'拡張子のチェック
If fso.GetextensionName(fileObj) = "zip" Then
' Lhaplusのコマンド方法
SendKeys "pass" & "{Enter}",True
Sleep (2000)
Shell ("C:\Program Files\Lhaplus\Lhaplus.exe /o:C: C:\zipFile\" & honjitu & "\" & fileObj.Name)
Sleep (5000)
End If
Next fileObj
'後処理
Set fso = Nothing
Set fileObj = Nothing
End Sub
ただ、どうしても最後のファイルだけ、パスワードを入れるボックスが出た時点で終わる。(解凍されない)
ここから、
改めてSendkeysを調べると、
「False (既定値) の場合は、キーが送信された直後のプロシージャに制御が戻されます。 True の場合、キーボード操作は制御がプロシージャに戻される前に処理されている必要があります。」
と書いてあったので、
もしかしてFalse?と思い、
[,True]を削除。
SendKeys "pass" & "{Enter}",True
↓
SendKeys "pass" & "{Enter}"
DoEventsで戻すと書いてあったので、End Ifの前と後ろにDoEvents
途中で、End Ifのあとはいらないんじゃないかと思って、
消したら動かなかったので、訳わかってないけど、両方にしている。
Sleep (5000)
End If
Next fileObj
↓
Sleep (5000)
DoEvents
End If
DoEvents
Next fileObj
今のところ、安定して動いている。
(上のコードの赤い部分を下の青いコードに取り換えた)
おそらく、
環境に左右されるので、
Sleepの秒数とかは変えてみて、しっくりくる秒数にしてください。
あと、Format関数はAccessしか使えません。
ExcelやVBSの時は使えませんので、他の方法に直してください。