Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5743 / 13645 ツリー ←次へ | 前へ→

【49133】何故、実行時エラー'52'?? すいか 07/5/24(木) 16:26 質問[未読]
【49135】Re:何故、実行時エラー'52'?? neptune 07/5/24(木) 16:41 発言[未読]
【49140】Re:何故、実行時エラー'52'?? すいか 07/5/24(木) 18:04 お礼[未読]
【49142】Re:何故、実行時エラー'52'?? neptune 07/5/24(木) 18:40 発言[未読]
【49143】Re:何故、実行時エラー'52'?? ichinose 07/5/24(木) 21:14 発言[未読]
【49153】Re:何故、実行時エラー'52'?? すいか 07/5/25(金) 15:12 お礼[未読]
【49138】Re:何故、実行時エラー'52'?? すいか 07/5/24(木) 17:02 発言[未読]

【49133】何故、実行時エラー'52'??
質問  すいか  - 07/5/24(木) 16:26 -

引用なし
パスワード
   よろしくお願いします。


Public Const cnsWorkDir       As String = "D:\usr"
Public Const cnsTempDir       As String = "C:\temp"
Public Const cnsVersion       As String = "Ver1.0"

Sub auto_open()
  Dim CurMenuBarCombo       As CommandBar
  Dim newMenu           As CommandBarPopup
  Dim newSubMenu         As CommandBarPopup
  Dim newSub2Menu         As CommandBarPopup
  Dim ctrl1            As CommandBarButton
  Dim r              As VbMsgBoxResult
  
  If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" Or _
    Dir(cnsWorkDir, vbDirectory) = "" Then
    r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
    Exit Sub
  End If
  
  Set CurMenuBar = CommandBars.ActiveMenuBar
  Set newMenu = CurMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
  newMenu.Caption = "データ検索機能"
  Set ctrl1 = newMenu.Controls.Add(Type:=msoControlButton)
  With ctrl1
    .Caption = "月別データ検索機能"
     ctrl1.OnAction = "OpenRqdMonthData" 'マクロプロシージャ名
  End With
  Set ctrl1 = newMenu.Controls.Add(Type:=msoControlButton, Id:=1)
  With ctrl1
    .Caption = "日別データ検索機能"
    .OnAction = "LoadUkewatashi"
  End With
  Set ctrl1 = newMenu.Controls.Add(Type:=msoControlButton, Id:=1)
  ctrl1.Caption = "終了"
  ctrl1.Style = msoButtonCaption
  ctrl1.OnAction = "auto_close"

End Sub

Sub auto_close()
  Dim CurMenuBar         As CommandBar
  Dim newMenu           As CommandBarPopup

  On Error Resume Next
  Set CurMenuBar = CommandBars.ActiveMenuBar
  Set newMenu = CurMenuBar.Controls.Item("データ検索機能")
  newMenu.Delete
  Workbooks(ThisWorkbook.Name).Close SaveChanges:=False
End Sub


起動してすぐに、「実行時エラー'52' ファイル名または番号が不正です」と、
エラーになってしまいます。

実際に現象の起きたPCがそばにないので、環境はわかりません。(スミマセン)
OSはWindowsです。
これだけで、考えられる原因を教えていただきたいのですが・・。
ちなみに、私のPC(XP SP2、Excel2002)では、問題ありませんでした。
フォルダ違い、ファイル無し、ドライブ無しも実験しましたが、
「動作環境エラー」のメッセージが出て、実行時エラーにはなりませんでした。

【49135】Re:何故、実行時エラー'52'??
発言  neptune  - 07/5/24(木) 16:41 -

引用なし
パスワード
   こんにちは

>  If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" Or _
>    Dir(cnsWorkDir, vbDirectory) = "" Then
を、少し不細工ですが、
If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" then
 r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
  Exit Sub
else Dir(cnsWorkDir, vbDirectory) = "" Then
  r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
  Exit Sub
end if

にしてみたら切り分けができませんか?

【49138】Re:何故、実行時エラー'52'??
発言  すいか  - 07/5/24(木) 17:02 -

引用なし
パスワード
   追記です。
現象の起こったPCは、OSがXP、Excelは2002でした。
何台ものPCでちゃんと稼動しているExcelですが、2台だけこの症状が・・。
他に特殊なアプリをインストールしているわけでもないようです。

【49140】Re:何故、実行時エラー'52'??
お礼  すいか  - 07/5/24(木) 18:04 -

引用なし
パスワード
   ▼neptune さん:
>こんにちは
>
>>  If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" Or _
>>    Dir(cnsWorkDir, vbDirectory) = "" Then
>を、少し不細工ですが、
>If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" then
> r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
>  Exit Sub
>else Dir(cnsWorkDir, vbDirectory) = "" Then
>  r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
>  Exit Sub
>end if
>
>にしてみたら切り分けができませんか?

解決までには至りませんでしたが、
私のPCで全パターンを実験してどれもプログラミングされた"動作環境エラー"が
表示されるのですが、
ステップごと切り分けて、確認用のmsgboxを入れ、現象の起こるPCで試してみたら
どうやら「Dir(cnsWorkDir, vbDirectory) = ""」の部分で
エラーが発生しているようです。
Dドライブが存在しないか、\usrフォルダが存在しないということなのでしょう・・。
でも、何故実行時エラー'52'なのでしょうか??
私のPCではちゃんとプログラミングされた"動作環境エラー"が表示されるのに・・。

【49142】Re:何故、実行時エラー'52'??
発言  neptune  - 07/5/24(木) 18:40 -

引用なし
パスワード
   こんにちは

>Dドライブが存在しないか、\usrフォルダが存在しないということなのでしょう・・。
>でも、何故実行時エラー'52'なのでしょうか??
記憶ですが、ネットワークで正常にLoginしてなかったら52エラー
が発生するというのをどこかで見たことがあります。

それに該当しなければ、・・・わかりません。
FSOではどうなるんでしょう?
Win95までターゲットなら、APIの利用とかも視野に入れてみるとか?

【49143】Re:何故、実行時エラー'52'??
発言  ichinose  - 07/5/24(木) 21:14 -

引用なし
パスワード
   こんばんは。

>
>記憶ですが、ネットワークで正常にLoginしてなかったら52エラー
>が発生するというのをどこかで見たことがあります。

これがビンゴっぽいですよ!!
ネットワークドライブが割り当てられているとかね!!

【49153】Re:何故、実行時エラー'52'??
お礼  すいか  - 07/5/25(金) 15:12 -

引用なし
パスワード
   neptuneさん、ichinose さん
ご回答ありがとうございます。とても参考になりました。

解決策として、ドライブチェックをして、D:が無い場合、C:を代用することに。
ヘルプのまんまですが、
  Dim fs, d, dc, s, n
  Dim D_Drive_FLG         As Boolean
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dc = fs.Drives
  D_Drive_FLG = False
  For Each d In dc
    If d = "D:" Then   <=== 1.
      If d.DriveType = 2 Or d.DriveType = 3 Then
        D_Drive_FLG = True
      End If
      Exit For
    End If
  Next
  If D_Drive_FLG = False Then
    cnsWorkDir = "C:\usr"
  Else
    cnsWorkDir = "D:\usr"
  End If
  
  If Dir(Environ("ProgramFiles") & "\lhaca\lhaca.exe", vbNormal) = "" Or _
    Dir(cnsWorkDir, vbDirectory) = "" Then
    r = MsgBox("標準PCではありません。標準PCで実行してください", vbDefaultButton1, "動作環境エラー")
    Exit Sub
  End If

>ネットワークで正常にLoginしてなかったら52エラーが発生するという・・
そうなのですか・・。
d.DriveType = 3のパターンはヤメておこうかなぁ・・。

ちなみに1.の部分なのですが、d.DriveLetter = "D"としてたら
実行時エラー'438'が出てしまって、苦肉の策でこうしました。
でも、今、投稿前に念のためd.DriveLetter = "D"を使ったらちゃんと動きます・・。
不思議です・・。
d.DriveLetter = "D"を使用しても大丈夫なのでしょうか?

5743 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free