Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2010)
マクロからhtmファイルが表示できない
投稿日時: 17/05/20 00:25:35
投稿者: はるき

パソコンAの共有フォルダにあるエクセルファイルで下記のマクロがあります。
パソコンBから操作するとHELP画面.htmは表示できるのですが、パソコンAだと
「別のプログラムでOLEの操作が完了するまで待機します」の表示が出て、
ハングアップしてしまいます。
この、エラーが出る前にHELP画面.htmが見つからない内容のメッセージが出る
ときもありましたので、そちらが原因かもしれませんが、何故ファイルが見つ
からないと出るのかもよく理解できません。(パソコンBでは機能するのに)
マクロの記述内容に問題があるのでしょうか?
どなたか、ご指導の程宜しくお願い致します。
ちなみに、パソコンAもBもOSやエクセルバージョンは同じです。
 
Sub HELP画面表示()
    Dim URL As String, IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    moji = ThisWorkbook.Path
    URL = "file:///" & Replace(moji, "\", "/") & "/その他/HELP画面.htm"
    With IE
      .Top = 200 'Y位置(上下)
      .Left = 700 'X位置(左右)
      .Width = 600 'IEウィンドウの幅
      .Height = 650 'IEウィンドウの高さ
      .Navigate (URL)
      .Visible = True
    End With
    Set IE = Nothing
End Sub

回答
投稿日時: 17/05/20 05:49:55
投稿者: WinArrow
投稿者のウェブサイトに移動

問題は
>ThisWorkbook.Path
そして
>"file:///"
です。
この指定は、ローカルPCの指定になります。
 
共有フォルダならば、ネットワークパスにしないといけません。
 

投稿日時: 17/05/20 06:57:54
投稿者: はるき

早速のご指導ありがとうございます。
 
>ThisWorkbook.Path
こちらの方は
On Error Resume Next
With CreateObject("WScript.Shell")
  .CurrentDirectory = ThisWorkbook.Path
End With
On Error GoTo 0
  moji = CurDir
 
これで良いかと思いますがいかがでしょうか?
 
>"file:///"
共有フォルダならば、ネットワークパスにしないといけません。

しかし、こちらの記述をどのようにすれば良いかが、良くわかりませんので
教えていただければと思います。よろしくお願いいたします。
カレントディレクトリを切り替えておけば、こちらはこの記述で大丈夫でしょうか?
 
現在、場所が違うのでネットワーク環境が使えないので試すことができませんので
質問だけとなっています。ご容赦を。

回答
投稿日時: 17/05/20 11:06:41
投稿者: WinArrow
投稿者のウェブサイトに移動

私が、勘違いしていたような気がします。
 
マクロブックは、「パソコンA」の共有フォルダにあるんですよね?
 
そうなると、よく変わりませんね

回答
投稿日時: 17/05/20 14:03:53
投稿者: i-brown

単にパスが誤っているようにも見えますので、パソコンBからエクスプローラーを使って、パソコンAのヘルプファイルを開き、パソコンBのIEに表示されたパスと、Excelで設定しているパスを比較してはいかがでしょうか?

回答
投稿日時: 17/05/20 14:16:45
投稿者: simple

ローカルで実行すると類似事象が観察されます。
 
私の環境(win7,2010)で普通に実行すると問題ありませんが、
ステップ実行してみると、
オートメーションが云々(*)というエラーが発生します。
 
何かタイミングの関係が作用しているような気がします。
(追いつかないというんじゃなく逆の事象?)
 
動作の原因を突き止めるのは難しいので、臨床的対応で逃げるのが速いかもしれませんね。
Visibleプロパティをコントロールしなくても普通に表示されると思いますし。
 
余談:
うんぬん と読みます。
某国の総理大臣が「でんでん」と国会答弁で発言されたそうですので、
ここでも注記が必要と判断して追記しておきます。(余談終わり)

回答
投稿日時: 17/05/20 20:51:35
投稿者: MMYS

どのように実行しているか分かりませんが、普通に実行した場合、バスは
 パソコンA → C:\html\その他\HELP画面.htm
 パソコンB → \\PC\html\その他\HELP画面.htm
となると思います。
 

はるき さんの引用:
>
"file:///"
共有フォルダならば、ネットワークパスにしないといけません。

しかし、こちらの記述をどのようにすれば良いかが、良くわかりませんので

自身の共有フォルダでもエクスプローラのネットワークには表示されます。
そして、そのネットワークのフォルダから起動した場合、ThisWorkbook.Path は
\\PC\html
となります。つまり、パスはパソコンBと同一環境になります。
ローカルファイルでもネットワーク経由で開けば良いのです。
 
ところで、今回の原因はおそらくパスは無関係と思います。
当方で確認した所、
file:///C://html/その他/HELP画面.htm
でも、問題なく動作します。
 
「別のプログラムでOLEの操作が完了するまで待機します」で検索すると
同症状を訴える方が大勢おられます。
パソコンA自体のトラブルの可能性が高いと思います。
 
はるき さんの引用:

On Error Resume Next
With CreateObject("WScript.Shell")
  .CurrentDirectory = ThisWorkbook.Path
End With
On Error GoTo 0
  moji = CurDir

これはExcelのカレントフォルダを切り替えているだけてす。
なので今回のケースでは不要なコードと思います。
 

投稿日時: 17/05/20 22:54:45
投稿者: はるき

留守にしていて、返事が遅くなってすみません。
WinArrowさん、i-brownさん、simpleさん、MMYSさん、コメントありがとうございます。
自宅ではPCが1台しかないので、月曜日に職場でいろいろと試してみようと思います。
 
MMYSさんからのコメントで
 
>どのように実行しているか分かりませんが、普通に実行した場合、バスは
> パソコンA → C:\html\その他\HELP画面.htm
> パソコンB → \\PC\html\その他\HELP画面.htm
 
  パソコンAもBもネットワーク下でのパスとなっています。
   → \\PC\html\その他\HELP画面.htm
 
>「別のプログラムでOLEの操作が完了するまで待機します」で検索すると
>同症状を訴える方が大勢おられます。
>パソコンA自体のトラブルの可能性が高いと思います。
 
  私もネットで検索して調べましたが、今回の症状と似たようなケースは
  「別のプログラムでOLE...待機します」では見当たりませんでした。
  今回のマクロを含むエクセルファイルはネットワーク下で数年前から運用しており
  パソコンA、B共に何ら問題なく作動しておりました。HELP画面の表示部分のマクロ
  を最近追加した結果、今回の症状が出ることとなりました。
  パソコンAの環境や設定状況など、もう一度チェックしてみたいと思います。
  解決することができましたら、またここにアップしようと思います。
  もう少しの間は、解決済みではなく、この状態としておきたいと思います。
  みなさま、どうもありがとうございました。

回答
投稿日時: 17/05/21 19:45:09
投稿者: MMYS

経験上、今回のケースは原因追求は解決困難かもしれません。
 
なので、その際の代替え案。
URLを開くだけなら、方法は複数存在します。
http://officetanaka.net/excel/vba/tips/tips42.htm
 
また、UserForm内にWebBrowserコントロールを配置する方法もあります。
ヘルプの表示だけなら十分かも。
 

投稿日時: 17/05/21 21:22:53
投稿者: はるき

MMYSさん、情報ありがとうございます。
 
実は、今回のマクロもOfficeTANAKAのこのURLを参照して作成いたしました。
Windowの表示位置と大きさを指定したかったので、samlpe6を参照して組み合わせて作成しました。
オブジェクトとしてWinowの表示位置や大きさを同様に指定できれば良いのですが..
ちなみに、Snmple4を試してみたのですが、位置指定のところでエラーが出ます。
WSHの捉え方が間違っているのでしょうね。
他にウィンドウサイズを指定できる方法があれば良いのですが。
 
Sub Sample4()
    Dim WSH As Object, URL As String, moji As String
    moji = ThisWorkbook.Path
    URL = "file:///" & Replace(moji, "\", "/") & "/その他/HELP画面.htm"
    Set WSH = CreateObject("Wscript.Shell")
      WSH.Run URL, 5
    With WSH
     .Top = 200 'Y位置(上下)
     .Left = 700 'X位置(左右)
     .Width = 600 'IEウィンドウの幅
     .Height = 650 'IEウィンドウの高さ
    End With
    Set WSH = Nothing
End Sub

投稿日時: 17/05/21 22:25:47
投稿者: はるき

MMYS さんの引用:
経験上、今回のケースは原因追求は解決困難かもしれません。
 
また、UserForm内にWebBrowserコントロールを配置する方法もあります。
ヘルプの表示だけなら十分かも。
 

 
上記の方法で、試したところ、自宅パソコンではうまくいきました。
明日、ネットワーク下で試してみることにします。
いろいろと、ご指導いただきありがとうございました。

投稿日時: 17/05/22 12:04:06
投稿者: はるき

はるき さんの引用:
MMYS さんの引用:
経験上、今回のケースは原因追求は解決困難かもしれません。
 
また、UserForm内にWebBrowserコントロールを配置する方法もあります。
ヘルプの表示だけなら十分かも。
 

 
上記の方法で、試したところ、自宅パソコンではうまくいきました。
明日、ネットワーク下で試してみることにします。
いろいろと、ご指導いただきありがとうございました。

 
UserForm内にWebBrowserコントロールを配置する方法
→職場のネットワークでもうまくいきました。
 多少、画質は劣化しますが大丈夫そうです。
 
ありがとうございました。