こんばんは、みなさん。
少し前に以下の質問でプログラムを作っていただいたのですが、
WindowsXPだとうまく動くのに、Windows2000だとうまく動作しません。
http://question.woman.excite.co.jp/kotaeru.php3? …
具体的には、「ZIP作成メイン」【CreateZIP(p_strZipName, p_colParams)】関数の以下の部分で、
オブジェクト実行エラーで引数の指定が間違っているとか何かのエラーが表示されました。
'書庫オブジェクトを取得する
Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
XPではうまく動いているので、おそらくはVBScriptのインタプリタ側に
何らかの違いがあるようです。
この構文の代わりに有効なコードを書きたいと思います。
よろしくお願いします。
No.6ベストアンサー
- 回答日時:
どうも10500YEN(←よく見てね)です。
>ZIPに関連しない部分だけ抜き出したサンプルでも
>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
いいえ、ここがそのOSでZIPを扱えるかどうかの、一番の要です。
WIN2000環境で
(1)ZIPFLDR.DLLをレジストリ登録しましたか?
(2)それによって、エクスプローラで書庫ファイルの一覧が表示できるようになりましたか?
それができなければ、ネームスペースとしてのオブジェクトを取得は無理です。
2000環境を潰したので、私のところでの実験はできません。
以前、#5にて発言した内容について、onoohnoさんがどのような対応をしたのでしょうか?
それがわかると、無理かどうかもはっきり発言できるのですが、
今の段階では、まずは#5の発言で示した内容を行動してみてくださいとしか
言えません。。。
この回答への補足
105YENさん、こんばんは。
>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
はどう解釈すればよいのでしょうか?
単に新しいシェルオブジェクトを作ってるだけに見えてます。
たしかにXP環境でZIPFLDR.DLLをリネームしてみたら、
書庫が作成できなかったのは確認しました。
明日2000環境でどうなるか確認してみます。
zipfldr.dllを%windir%\system32\に入れて、
次のコマンドを実行すればよいのでしょうか?
regsvr32 %windir%\system32\zipfldr.dll
やり方を確認できたら試してみます。
よろしくお願いします。
No.8
- 回答日時:
やりかたはあっていると思います。
その結果、エクスプローラでZIPの内容を確認できましたか?
それをこちらも知りたいです。
それと
>ZIPFLDR.DLL
以外に
DZIP32.DLL
DUNZIP32.DLL
が必要なようです。
http://homepage2.nifty.com/winfaq/w2k/hints.html …
http://linuxmemo.dip.jp/theme.htm
これでエクスプローラで表示ができなければ、Win2000環境化では無理として、アーカイバを利用するしか思いつきません。
この回答への補足
エクスプローラーでZIPの内容を確認するのはまだやってませんでした。
明日やってみます。また、DZIP32.DLLとDUNZIP32.DLLも同じように
例のコマンドでやるということでよいでしょうか?
手順の確認をしてると週一ペースになってしまうので、コマンドは同様でやります。
環境依存は美しくないので、それでできなかったらZIPは諦めます。
まず、DZIP32.DLLとDUNZIP32.DLLが入手できませんでした。
DZIP32.DLLをダウンロードしようと思ってWEB検索したところ、
1050YENさんの言っている方法と同じことをやっている個人サイトがありました。
DLLはMeや98Plusに入ってるようですが、あいにくこれらのOSがありません。
XPにはないようです。どうすればよいでしょうか?
DLLが入手できなければ今回は諦めようと思います。
No.7
- 回答日時:
>>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
>はどう解釈すればよいのでしょうか?
>単に新しいシェルオブジェクトを作ってるだけに見えてます。
「単に新しいシェルオブジェクトを作ってる」部分は
⇒Set m_objShell = CreateObject("Shell.Application")
です。
そのシェルオブジェクト.NameSpace(パス文字列)は、、、、
エクスプローラを表示すると、
・左側にTreeView[フォルダ一覧]
・右側にListView[ファイル一覧]
がありますよね?
そのフォルダ一覧側で選択したような状態を示します。
なので、エクスプローラがZIPに対応していないような状態のままで、
シェルオブジェクト.NameSpace[ZIPファイル]は無理なのです。
前にも言いましたように、私には環境が無いので正確な情報が言えませんが、、、、
Win2000にはzipfldr.dllが入っているのでしょうか?
であれば、regsvr32にzipfldr.dllをドラッグしてあげてみてください。
レジストリ登録が成功したら、再起動後、エクスプローラでZIPの内容を
見ることができるできるかも確認してください。
この回答への補足
こんばんは、1050YENさん。
シェルオブジェクト.NameSpace(パス文字列)は、
フォルダ一覧側で選択したような状態ですか。
何となくわかりました。
それで、、C:\WINNT\SYSTEM32フォルダ直下にzipfldr.dllを入れて、
コマンドプロンプトで上記ディレクトリに移動して、
"regsvr32 zipfldr.dll"コマンドを実行したのですが、
やっぱり同じエラーが出てしまいました。
何かやり方が間違っていたのでしょうか?
よろしくお願いしますです。
No.5
- 回答日時:
以前の発言の当事者@5000円要求です。
ZIPFLDR.DLL
が、レジストリに登録されているかが関係するのかな?
http://osaka.cool.ne.jp/cyberidoc/cmd/092.html
http://www.lhut32.com/kanren.html
これでできないのであれば、アーカイバを利用する以外に思いつきません。
この回答への補足
以下のような感じでZIPに関連しない部分だけ抜き出したサンプルでも
なぜかうまく行きませんでした。
(実際に動かしたコードと全く同じかは?ですが)
-----
Const DEF_ZIP_PATH = "C:\書庫.zip" '書庫保存先固定
Dim m_objFso
Dim m_objShell
Set m_objFso = CreateObject("Scripting.FileSystemObject")
Set m_objShell = CreateObject("Shell.Application")
If Not CreateZIP(p_strZipName, p_colParams) Then
Exit Function
End If
Private Function CreateZIP(p_strZipName, p_colParams)
Dim l_objZIP
Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
End Function
-----
フォルダの権限等もadministratorなので問題ないはずなので、
これはW2Kがクラス(オブジェクト?)に非対応なのでしょうか?
m_objShell.NameSpaceに文字列を渡すだけのようですけど。。。
無理そうなら今回は一旦終了しますが何かあればお願いします。
今回解決できたら1050円なら本当に出してもいいと思ってます。
No.4
- 回答日時:
>ZIPうんぬんとは関係ないようですけど。
。。そうですね。
ZIP.VBSのREADME(ZIP.TXT) には、確認できないがwindows2000で動くと思うというように書いてあったけど、してみると、動かなかったというわけですね。
誰か、Windows2000で他に試してみた人はいないのかな・
今は使っていないのですけど、
昔Windows2000を使っていたときの記憶によると、windows2000でエクスプローラーからフォルダを圧縮してZIPファイルを作れたような記憶があるんだけど・・
例のコードを書いてくれた人に、動かなかった短いサンプルを見てもらってます。
もし、それで解決できないようなら今回は一旦保留にします。
また別の質問でお願いします。ありがとうございました。
No.3
- 回答日時:
追伸です。
Win2Kでも、コマンドラインのMakecab.exeは使えそうなのでこれをShellで呼び出しても良さそうです。
キャビネットファイルはWinXPのZipファイルと同等の雰囲気?
検証はしていません。ごみレスご容赦を。
最悪cabファイルでもやってみます。
自作のバックアップツールでバックアップファイルを圧縮したいだけなので、
できなかったらできなかったでしかたないと思ってます。
毎日15MBくらいのバックアップができるので、1週間でローテートさせればいいかなというところです。
またよろしくお願いします。ありがとうございました。
No.2
- 回答日時:
あれはWindowsXPから可能となったZIPファイルをフォルダとして扱う機能を
利用してますのでWin2000では到底無理と思います。
VBSで何らかのDLLを扱えれば何とかなるのかもしれませんが、ちょっと分かりません
↓ここが参考となるかも
統合アーカイバプロジェクト
http://www.madobe.net/archiver/index.html
やはりソースコード側の問題ではなかったんですね。。。
かなり調べましたが使い方は誤ってなかったですから。
教えていただいたURLを見てDLLとか探してみます。
ありがとうございました。
No.1
- 回答日時:
windows2000でもNameSpace は、使えるはずなので、
http://msdn.microsoft.com/library/default.asp?ur …
引数として渡したフォルダの指定がおかしいか
権限がないんじゃないかと思います。
BLUEPIXYさんはいろいろやってるんですね。
そう思ってもっと短くサンプルを作ってみたのですが、
やはり特段の間違いはありませんでした。
どうやらNo.2さんの書き込みのとおりの原因らしいです。
でも腑に落ちないのは、shell.applicationオブジェクトを作って、
そのNameSpaceメソッドを使ってるだけなのに、
ZIPうんぬんとは関係ないようですけど。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) VBAでWorkbook.addの使い方 3 2023/02/01 11:58
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
Excelでフィルタをかけると警告...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAからPDFファイルにパスワー...
-
EXCEL VBA オートシェイプナン...
-
TPenの使い方
-
VBAで Set wb = Sheets(1).Cop...
-
findメソッドの変数について
-
VBA オブジェクトが空かどうか...
-
VBAで既に開いている別アプリケ...
-
エクセルVBA 他ブックのシート...
-
VBScriptでファイルの日時順(降...
-
VBからPDFファイル自動生成...
-
PowerPointVBAでスライドマスタ...
-
Word2007数式でIMEオン/オフを...
-
UserForm1.Showでエラーになり...
-
エクセルマクロエラー「'Cells'...
-
[VBA]CDOメッセージ送信エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
Excelでフィルタをかけると警告...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
VBAからPDFファイルにパスワー...
-
PowerPointVBAでスライドマスタ...
-
EXCEL VBA オートシェイプナン...
-
オブジェクトが見つかりません
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ExcelVBAでのNZ関数について
-
上下の位置揃えについて
-
UserForm1.Showでエラーになり...
-
AccessVBAで「dim dbs as datab...
-
findメソッドの変数について
-
VBScriptでファイルの日時順(降...
-
Excel VBAでWordの複数ファイル...
おすすめ情報