Excel VBA質問箱 IV

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

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


9667 / 13644 ツリー ←次へ | 前へ→

【26038】フォルダを開く操作でエラーが出てしまい... にー 05/6/22(水) 13:35 質問[未読]
【26061】Re:フォルダを開く操作でエラーが出てしま... ichinose 05/6/22(水) 18:17 発言[未読]
【26067】Re:フォルダを開く操作でエラーが出てしま... りん 05/6/22(水) 18:50 発言[未読]
【26082】Re:フォルダを開く操作でエラーが出てしま... にー 05/6/23(木) 10:53 お礼[未読]
【26089】情報のフィードバック にー 05/6/23(木) 13:37 お礼[未読]
【26110】Re:情報のフィードバック ichinose 05/6/23(木) 19:05 発言[未読]
【26139】Re:情報のフィードバック にー 05/6/24(金) 13:31 お礼[未読]
【26148】Re:情報のフィードバック Kein 05/6/24(金) 15:41 回答[未読]

【26038】フォルダを開く操作でエラーが出てしまい...
質問  にー  - 05/6/22(水) 13:35 -

引用なし
パスワード
   いつも勉強させて頂いております。
今回はフォルダを開く操作で質問があります。

上司からマクロの作成を依頼され、おまけとして
ネットワーク上の共有フォルダを呼び出す機能をユーザーフォームに
組み込もうとしました。
フォルダを開くソースは過去ログから頂きました。

私の環境(WinXP+Excel2002)では以下のコードを利用して
希望のフォルダを開くことが出来るのですが
WinXP+Excel2003の環境で動作させるとエラーが出てしまいます。

エラーの内容は
実行時エラー '-2147024843(80070035)':
'Run'メソッドは失敗しました 'IWshShell3'オブジェクト

ソースは
Sub フォルダオープン(変数1 As String, 変数2 As String)
'
  Dim objShell As Object, objFolder As Object
  Dim FSO As Object, WshShell As Object
  Dim FolN As String, SPath As String
  
  Set objShell = CreateObject("Shell.Application")
  FolN = "\\ネットワーク共有フォルダ\○○\" & 変数1 & "\" & 変数2
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set WshShell = CreateObject("WScript.Shell")
  SPath = FSO.GetFolder(FolN).ShortPath
  WshShell.Run SPath, 3, False
  Set FSO = Nothing: Set WshShell = Nothing
  Set objFolder = Nothing: Set objShell = Nothing
End Sub

ユーザーフォームから変数1、変数2を設定してパスを変化させています。
過去ログや目安箱を見てみたのですが理解できませんでした。

助言宜しくお願い致します。

【26061】Re:フォルダを開く操作でエラーが出てし...
発言  ichinose  - 05/6/22(水) 18:17 -

引用なし
パスワード
   ▼にー さん:
こんにちは。

>いつも勉強させて頂いております。
>今回はフォルダを開く操作で質問があります。
>
>上司からマクロの作成を依頼され、おまけとして
>ネットワーク上の共有フォルダを呼び出す機能をユーザーフォームに
>組み込もうとしました。
>フォルダを開くソースは過去ログから頂きました。
>
>私の環境(WinXP+Excel2002)では以下のコードを利用して
>希望のフォルダを開くことが出来るのですが
>WinXP+Excel2003の環境で動作させるとエラーが出てしまいます。
Excel2003は、持ってないので確認できませんが、
私もExcel2000、2002で確認したところ
異常はありませんでした。


>エラーの内容は
>実行時エラー '-2147024843(80070035)':
>'Run'メソッドは失敗しました 'IWshShell3'オブジェクト
>
>ソースは
>Sub フォルダオープン(変数1 As String, 変数2 As String)
>'
>  Dim objShell As Object, objFolder As Object
>  Dim FSO As Object, WshShell As Object
>  Dim FolN As String, SPath As String
>  
>  Set objShell = CreateObject("Shell.Application")
>  FolN = "\\ネットワーク共有フォルダ\○○\" & 変数1 & "\" & 変数2
>  Set FSO = CreateObject("Scripting.FileSystemObject")
>  Set WshShell = CreateObject("WScript.Shell")
>  SPath = FSO.GetFolder(FolN).ShortPath
  WshShell.Run FolN, 3, False
'         ↑ここにFolNを直接してしたらどうなりますか?
'          駄目もとで試してみて下さい
>  Set FSO = Nothing: Set WshShell = Nothing
>  Set objFolder = Nothing: Set objShell = Nothing
>End Sub
>
>ユーザーフォームから変数1、変数2を設定してパスを変化させています。
>過去ログや目安箱を見てみたのですが理解できませんでした。

他にも
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=17527;id=excel

このあたりのコードをリンク先ではファイル名を指定していますが、
フォルダ名でも可能なので変更して試してみて下さい。

【26067】Re:フォルダを開く操作でエラーが出てし...
発言  りん E-MAIL  - 05/6/22(水) 18:50 -

引用なし
パスワード
    にー さん、ichinose さん、こんばんわ。

WinXP(管理者)+Excel2003で以下のコードを実行してみました。
確実に存在するネットワークパスになるようにして実行すると、ちゃんとフォルダが開きました。

Sub フォルダオープン(変数1 As String, 変数2 As String)
'
  Dim objShell As Object, objFolder As Object
  Dim FSO As Object, WshShell As Object
  Dim FolN As String, SPath As String,A$ '(A As String)

  FolN = "\\ネットワーク共有フォルダ\○○\" & 変数1 & "\" & 変数2
  'フォルダチェック
  On Error Resume Next
  A$ = Dir(FolN, vbDirectory)
  On Error GoTo 0
  '分岐
  If A$ = "" Then
    MsgBox FolN, vbExclamation, "Folder Not Found"
  Else
    Set objShell = CreateObject("Shell.Application")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set WshShell = CreateObject("WScript.Shell")
    'SPath = FSO.GetFolder(FolN).ShortPath 'この行はいらないと思う
    WshShell.Run FolN, 3, False
    Set FSO = Nothing: Set WshShell = Nothing
    Set objFolder = Nothing: Set objShell = Nothing
  End If
End Sub

パス名とアクセス権を確認してみてはいかがでしょうか?

【26082】Re:フォルダを開く操作でエラーが出てし...
お礼  にー  - 05/6/23(木) 10:53 -

引用なし
パスワード
   >ichinoseさん、りんさん

アドバイス有難う御座います。
お二人の助言を元にソースをいじってみます。
有難う御座いました。

多謝!!

【26089】情報のフィードバック
お礼  にー  - 05/6/23(木) 13:37 -

引用なし
パスワード
   >ichinoseさん、りんさん
お二人のおかげで無事やりたいことが出来ました。

情報をフィードバックします。

権限やパスは問題なかったので、りんさんのアドバイスを実行しました。
りんさんがおっしゃっていたFolNの部分に直接パスを入力すれば問題ありませんでしたが
変数を利用しパスを変化させようとするとだめでした。
そこで、りんさんがリンクをしてくれた書き込みを読み、ichinoseさんのコード
を利用させてもらい成功しました。
コードは下記のようになりました。

Sub test(変数1 As String, 変数2 As String)
  Set ep = CreateObject("InternetExplorer.Application")
  With ep
   .Visible = True
   .MenuBar = False
   .navigate "\\ネットワークの共有フォルダ\○○\" & 変数1 & "\" & 変数2
  End With
  Set ep = Nothing
End Sub

本当に助かりました。
有難う御座います!!

【26110】Re:情報のフィードバック
発言  ichinose  - 05/6/23(木) 19:05 -

引用なし
パスワード
   ▼にー さん、りんさん
こんばんは。

>お二人のおかげで無事やりたいことが出来ました。

それはよかったのですが、何故元コードが駄目なのか
不明ですねえ??
Wshのバージョンが違うのでしょうかねえ??

ひとつだけ気になった点が・・・。
りんさんのコードをお借りして


>Sub フォルダオープン(変数1 As String, 変数2 As String)
>'
>  Dim objShell As Object, objFolder As Object
>  Dim FSO As Object, WshShell As Object
  Dim FolN , SPath ,A$ '(A As String)
'   ↑このように型宣言なしで試してみて頂きたいのですが・・
>
>  FolN = "\\ネットワーク共有フォルダ\○○\" & 変数1 & "\" & 変数2
>  'フォルダチェック
>  On Error Resume Next
>  A$ = Dir(FolN, vbDirectory)
>  On Error GoTo 0
>  '分岐
>  If A$ = "" Then
>    MsgBox FolN, vbExclamation, "Folder Not Found"
>  Else
>    Set objShell = CreateObject("Shell.Application")
>    Set FSO = CreateObject("Scripting.FileSystemObject")
>    Set WshShell = CreateObject("WScript.Shell")
>    'SPath = FSO.GetFolder(FolN).ShortPath 'この行はいらないと思う
>    WshShell.Run FolN, 3, False
>    Set FSO = Nothing: Set WshShell = Nothing
>    Set objFolder = Nothing: Set objShell = Nothing
>  End If
>End Sub

元々WshはVBS等のスクリプト言語で使う事を目的としていたみたいなので
VBSでは、変数の型宣言がないですよね?
別件でしたが、これで動いた事があったことを思い出したので・・・。
もし、これを見ることがありましたら、試してみて下さい。

また、この投稿をご覧になっている方で
にー さんの元コードでエラーが発生した方に
試していただけるとはっきりするのですが・・。

【26139】Re:情報のフィードバック
お礼  にー  - 05/6/24(金) 13:31 -

引用なし
パスワード
   ichinoseさん、りんさん、こんにちは。

以前りんさんに教えて頂いたコードを試した環境と別の
WinXP+EXCEL2003の環境で05/6/22(水) 18:50 のコードを
試したところ、何の問題も無く動きました。
おぉ!と思い、私の机の隣にあるWinXP+EXCEL2003の環境で
再チャレンジしましたが相変わらずエラーです。
結論から言うと私の隣のパソコンだけだめでした。

・・・・なんなんでしょうね???

私の隣の環境は無かったものとして忘れます。

お二人のおかげで良い勉強が出来ました。
有難う御座います。

【26148】Re:情報のフィードバック
回答  Kein  - 05/6/24(金) 15:41 -

引用なし
パスワード
   りんさんのコードをお借りします。ちょっとこれで試してみて下さい。

Sub フォルダオープン(変数1 As String, 変数2 As String)
  Dim FSO As Object, WshShell As Object
  Dim FolN As String

  FolN = "\\ネットワーク共有フォルダ\○○\" & 変数1 & "\" & 変数2
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set WshShell = CreateObject("WScript.Shell")
  On Error GoTo ErLine
  WshShell.CurrentDirectory = FolN
  On Error GoTo 0
  WshShell.Run FolN, 3, False
ErLine:
  Set FSO = Nothing: Set WshShell = Nothing
  If Err.Number <> 0 Then
    MsgBox "ネットワークフォルダーにアクセスできません", 48
  End If
End Sub

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