Page 5 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼VBAから自己解凍書庫 ザカリー 02/8/27(火) 13:56 ┗Re:VBAから自己解凍書庫 こうちゃん 02/8/27(火) 21:32 ┗Re:VBAから自己解凍書庫 ザカリー 02/8/27(火) 22:53 ┗Re:VBAから自己解凍書庫 こうちゃん 02/8/28(水) 11:30 ┗Re:VBAから自己解凍書庫 ザカリー 02/8/28(水) 13:23 ┗Re:VBAから自己解凍書庫 こうちゃん 02/8/28(水) 14:42 ┗Re:VBAから自己解凍書庫 ザカリー 02/8/28(水) 15:35 ┗Re:VBAから自己解凍書庫 こうちゃん 02/8/28(水) 18:18 ┗こうちゃんさん、解決しました。 ザカリー 02/8/28(水) 21:31 ─────────────────────────────────────── ■題名 : VBAから自己解凍書庫 ■名前 : ザカリー ■日付 : 02/8/27(火) 13:56 -------------------------------------------------------------------------
Excel VBAからdllを呼び出す、LZH圧縮ファイルの作成はようやく出来た のですが、自己解凍書庫の作成ができませんでした。 win32.SFXで、初期表示解凍先ディレクトリと、古いファイルの更新を を、VBA上から指定することはできないでしょうか? Const FlNam = "C:\My Documents\*" Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh" Command = "a -a1 -r2 -x1 -jp1 -jm4 " + """" + LzNam + """" + " " + """" + FlNam + """" |
ザカリー さん、こんにちは お役にたつかどうかわかりませんが、こちらのサイトでUNLHA32 APIのヘルプファイルがダウンロードできますので、参照してみてください。 http://www.wakusei.ne.jp/archiver/dev/ulhahl32.html |
▼こうちゃんさん、こんばんわ。 実は質問の前から、そこのヘルプをダウンロードしていたのですが、 以下のコマンドですと、カレントディレクトリ(C:\)の解凍だけで、 解凍先の変更が不可能になったり、-x1スイッチを外すと、 ディレクトリが構築されずに、(元の書庫ファイルはディレクトリ情報があるが) 意図した目的に達せずにいます。 Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh" Const FlNam = "C:\WINDOWS\デスクトップ\" Command = "s -a1 -r2 -jp1 -x1 -gw " & """" & LzNam & """" & " " & """" & FlNam & """" VBAの質問から外れてきていてすみません。 |
ザカリー さん、こんにちは 自己解凍書庫の解凍時の指定には"$"ファイルを使用します。 たとえば以下ようなテキストを作成して、ファイル名を $ として保存し、LZHに含めます。 $WindowTitle=testtesttest $InstallTitle=インストールするフォルダ(&D) $InstallDir=d:\test そのLZHからSFXを作成すると、$ファイルに指定した条件が解凍時設定されます。 # $ファイルは解凍されません。 詳細は前述HELPの「$ファイルコマンド説明」を参照してください。 ところで、このオプションだと、SFX作成ダイアログが開いちゃいませんか? s -a1 -r2 -jp1 -x1 -gw SFX作成時には、このあたりでいいんじゃないですか? s -x1 -gw2 #私の知識は昔のLHA.EXEの知識がベースになっています。 UNLHA32.DLLはVBAからは使ったことがないんで、間違っていることもあるかもしれません。 一応ここにかいていることは簡単なテストはしてますが、間違いがあったらごめんなさい。 |
こうちゃんさん、こんにちわ! >ところで、このオプションだと、SFX作成ダイアログが開いちゃいませんか? >s -a1 -r2 -jp1 -x1 -gw どういう訳か、今までSFX作成ダイアログが一度も開いた事がありません。 スイッチの設定が悪いのか、何か他の要因があるのか判断できずにいます。 何か参照設定等が必要なのでしょうか。 s -x1 -gw2 のスイッチですと、自己解凍ファイル作成中に、デスクトップ画面全体 が揺れるように乱れる現象が現れます。-jp1スイッチを挿入すると、LZHマウス ポインタアイコンのみが表示され、静かに動作します。 (いずれにしても、プログレスバーは表示された事もありません。) 出来上がった自己解凍ファイルを開き、"C:\WINDOWS\デスクトップ\"を 解凍先ディレクトリに指定しても、あるいは、 $ファイルにて、<展開先初期値>を、$InstallDir="C:\WINDOWS\デスクトップ\" と設定しても、C:\にしか解凍されません。 D:\ に設定した場合、正しくD:\ に解凍されます。 当方の環境はWindows98,Excel2000SR2です。 |
ザカリー さん、こんにちは すみません、いま手元にWin98がないので、再現ができません。 当方WinNT4.0Sp6aです・・ スイッチを "s -x1 -gw0 " や "s -x1 -gw1 " にした場合の動作はどうでしょう。 私の感覚では、SFX作成時には a r jp は使わないのではないかと思うのですが? ところで、UNLHA32.DLLの呼び出し部のコード等も見せていただけませんか。 Win98がないので、これ以上お役に立てるかどうかわかりませんが・・・(^^;) |
こうちゃんさん、何度もすみません。 スイッチ "s -x1 -gw0 "の場合、作成中、画面乱れがあり、 「skiped MS-DOSで扱えない名前のファイルです。」と表示され、 自己解凍は作成されませんでした。 スイッチ "s -x1 -gw1 "の場合、作成中、画面乱れがあり、 自己解凍は作成されますが、解凍先"C:\WINDOWS\デスクトップ\ 指定でも、C:\に解凍されました。 'Declaration Private Declare Function Unlha Lib "unlha32" ( _ ByVal hWnd As Long, _ ByVal szCmdLine As String, _ ByVal szOutput As String, _ ByVal dwSize As Long) As Long Sub LZH() 'LZH書庫作成 Dim Result As Integer Dim Command As String Dim RetMsg As String * 255 Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh" Const FlNam = "C:\My Documents\*" Command = "a -a1 -r2 -x1 -jp1 -jm4 " & """" & LzNam & """" & " " & """" & FlNam & """" Result = Unlha(vbNull, Command, RetMsg, 255) If Result = 0 Then MsgBox RetMsg, vbInformation, "LZH 圧縮完了" Else MsgBox RetMsg, vbCritical, "LZH 圧縮失敗" End If End Sub Sub LZH_2() '自己解凍作成(問題のコード) Dim Result As Integer Dim Command As String Dim RetMsg As String * 255 Const LzNam = "C:\WINDOWS\デスクトップ\file.lzh" Const FlNam = "C:\WINDOWS\デスクトップ\" Command = "s -jp1 -x1 -gw3 " & """" & LzNam & """" & " " & """" & FlNam & """" Result = Unlha(vbNull, Command, RetMsg, 255) If Result = 0 Then MsgBox RetMsg, vbInformation, "自己解凍変換完了" Else MsgBox RetMsg, vbCritical, "自己解凍変換失敗" End If End Sub |
ザカリー さん、こんにちは ウィンドウハンドルに、vbNullを渡していますが、0 で試験してみてください。 Result = Unlha(0, Command, RetMsg, 255) 本来はエクセルのウィンドウハンドルを渡すのですが、NULLでもいいことになっていますよね。 でもその場合でもvbNull渡すと挙動不信になっちゃいます。 Win98ではどうでしょか(?_?) |
▼こうちゃん さん: >ウィンドウハンドルに、vbNullを渡していますが、0 で試験してみてください。 >Result = Unlha(0, Command, RetMsg, 255) ご指摘の通りでした。プログレスバーが表示された瞬間は 感激しました。本当に有難うございます。 |