マイドキュメントにあるExcelファイルを開くには

解決


とみー  2003-08-10 07:11:02  No: 108051

VB.Netを使っています。
C:Documents and Settings\username\MyDocumentsの中にある既存のエクセル
を開きたいのですが、usernameの部分がパソコンによって違うので、困って
います。どのようにしたら、すべてのパソコンから開くことができるでしょ
うか。どなたかご存知の方よろしくお願いします。


Say  2003-08-10 07:22:21  No: 108052

本来、マイドキュメントはユーザごとのプライベートフォルダです。
そういう使い方をすべきではありません。
(日記をのぞき見するようなものです。)

公開したいExcelファイルを共有フォルダに移動してはいかがですか?


とみー  2003-08-10 07:59:13  No: 108053

申しわけありません。説明不足だったと思います。
自分で作った特定のエクセルファイル(例えばyama.xlsとします)をVB.NETの
フォーム上から開きたいということです。
VB6でいうとApp.Path & "\yama.xlsというコードではないかと思います。
多分、GetFolderPathというのを使うのではと思い、試してみたのですが、
できませんでした。
まだ、説明がまずいかもしれませんが、一生懸命考えました。よろしく
お願いします。


Say  2003-08-10 09:11:13  No: 108054

VB.Netのことはよく知りませんが、VB6の
App.Pathではマイドキュメントは取れませんが?

WSHを使うなら、
WScript.Shell.SpecialFolders("MyDocuments")
とか・・・。

APIでレジストリの
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserShellFolders\Personal
あたりをひっぱるとか・・・。


魔界の仮面弁士  2003-08-10 10:14:25  No: 108055

> 多分、GetFolderPathというのを使うのではと思い、試してみたのですが、
できませんでした。

あれ? それで取得できると思いますが…。

  TextBox1.Text = Environment.GetFolderPath
(Environment.SpecialFolder.Personal)

という感じですよね。


とみー  2003-08-10 15:32:07  No: 108056

Sayさん、魔界の仮面弁士さん。お世話になります。
TextBox1.Text = Environment.GetFolderPath
(Environment.SpecialFolder.Personal) & "\yama.xls"
でTextBox1には確かに表示され、うまくいきました。
ところが、いざ実行してみると
「C:Documents.xls」「and.xls」「setting.xls」・・・
というふうに別々にエクセルブックが開くようになりました。


魔界の仮面弁士  2003-08-11 10:37:02  No: 108057

それは、呼び出し方に問題があるのだと思います。
具体的には、どのような呼び出し方をしていますか?
とみーさんのコードを見せてください。

こちらの環境では、ProcessクラスのStartメソッドに、
空白を含んだファイル名を渡しても、正しくExcel 2002で起動されました。
  Dim P As New Process()
  P.Start("C:\Documents and Settings\username\My Documents\Book1.xls")

また、COM Interopで Workbooks.Open する場合も
空白を含んだパスでも問題ありませんでした。


とみー  2003-08-11 16:29:13  No: 108058

魔界の仮面弁士さん、お世話になります。

下のコードだとうまくいきます。(この場合、yama.xlsがC:にあります)

Dim oExcel As Object : Dim filename As String
oExcel = CreateObject("Excel.Application")
filename = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Shell(oExcel.Path & "\excel.exe " & "C:\yama.xls", 1)
   
が、このコードだとうまくいきません。
(この場合、yama.xlsがマイドキュメントにあります)

Dim oExcel As Object : Dim filename As String
oExcel = CreateObject("Excel.Application")
filename = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Shell(oExcel.Path & "\excel.exe " & filename & "\yama.xls", 1)

よろしくお願いします。


nanashi  2003-08-11 19:16:28  No: 108059

コマンドラインで実行する時、スペースの含まれるパスを指定するときは
前後をダブルクォーテーションで括る必要があったと思います。
試してませんが、下記でどうでしょう?

Shell(oExcel.Path & "\excel.exe """ & filename & "\yama.xls""", 1)


魔界の仮面弁士  2003-08-11 19:31:05  No: 108060

あれ? 何故、Shell関数を使っておられるのでしょうか。
折角、CreateObjectしたなら、そこからWorkbooks.Openメソッドで
開いてやれば良いと思いますよ。

# とはいえ、ファイルをExcelに開かせるのだけが目的ならば、
# Processクラスを使えば済みますので、わざわざ、低速な
# COM Interopに頼る必要も無いように思えます。

もしShellで行うなら、空白を含んだ引数(ファイル名)の前後を「"」で囲むか、もしくは、
ファイル名をショートファイル名で指定する必要があるのではないでしょうか。


とみー  2003-08-11 21:19:18  No: 108061

Sayさん、nanashiさん、魔界の仮面弁士さん、ありがとうございました。
無事解決しました。
最初からコードを見ていただければよかったですね。お手数をおかけしました。
初心者のため、これからも  いろいろな本を読んだり、ここの掲示板をお借
りして知識を増やしていきたいと思っています。
これからもよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加