2

XP、Windows 7、および Windows 8 を実行している複数のユーザーに配布した古い VB6 アプリがあります。次のコードは、エラー 91 ""オブジェクト変数またはブロック変数が設定されていません" をスローしています。

Const ssfPERSONAL = 46  'set directory to the common Documents folder
Dim strMyDocsPath As String  'stores common docsPath
On Error GoTo ErrorHandler

strMyDocsPath = CreateObject("Shell.Application").NameSpace(ssfPERSONAL).Self.Path

具体的には、最後の行が問題です。strMyDocsPath がユーザー コンピューター上の共通ドキュメント フォルダーを指すようにします。Windows 7 および 8 では正常に動作しますが、問題なく動作する XP 開発マシンを除いて、XP マシンでは動作しません。

問題のあるコンピューターで、scrrrun.dll の再登録を試みたところ、正常に登録されたというメッセージが表示されました。VB6 の配布可能な SP6 ファイルをダウンロードしてインストールしようとしましたが、それでもエラーが発生します。いくつかのフォーラムを検索しましたが、わかりません。何か案は?

4

1 に答える 1

3

このような種類のエラーをデバッグするときは、通常、1 行ごとに 1 つの呼び出しで複雑なワンライナーを解凍すると便利です。

Dim DebugObj1 As Object
Dim DebugObj2 As Object
Dim DebugObj3 As Object

Set DebugObj1 = CreateObject("Shell.Application")
Debug.Print "1: " & CStr(DebugObj1 Is Nothing)
Set DebugObj2 = DebugObj1.NameSpace(ssfPERSONAL)
Debug.Print "2: " & CStr(DebugObj2 Is Nothing)
Set DebugObj3 = DebugObj2.Self
Debug.Print "3: " & CStr(DebugObj3 Is Nothing)
strMyDocsPath = DebugObj3.Path

Debug.Print strMyDocsPath

その後、どの呼び出しが有用なオブジェクトを返さないかを正確に特定するのが簡単になります。あなたの場合、それは最も可能性が高い.NameSpace(ssfPERSONAL)です。

共有ドキュメントが無効になっている場合、Windows XP SP3 で問題を再現できました。それらを無効にする方法はたくさんあります。たとえば、これを参照してください: http://www.howtogeek.com/howto/windows/how-to-remove-shared-documents-icon-from-my-computer-in-windows-xp/

補足として、ShellSpecialFolderConstants.ssfPersonal実際にはMSDN0x05を参照してください。使用する値(または) は、実際には のような Common Documents フォルダーに変換されます。おそらく、誤解を招くような名前を使用することは、ベスト プラクティスとは言えません。460x2eCSIDL_COMMON_DOCUMENTSC:\Documents and Settings\All Users\Documents

于 2013-04-01T20:34:27.370 に答える