VB.Netを使っています。
C:Documents and Settings\username\MyDocumentsの中にある既存のエクセル
を開きたいのですが、usernameの部分がパソコンによって違うので、困って
います。どのようにしたら、すべてのパソコンから開くことができるでしょ
うか。どなたかご存知の方よろしくお願いします。
本来、マイドキュメントはユーザごとのプライベートフォルダです。
そういう使い方をすべきではありません。
(日記をのぞき見するようなものです。)
公開したいExcelファイルを共有フォルダに移動してはいかがですか?
申しわけありません。説明不足だったと思います。
自分で作った特定のエクセルファイル(例えばyama.xlsとします)をVB.NETの
フォーム上から開きたいということです。
VB6でいうとApp.Path & "\yama.xlsというコードではないかと思います。
多分、GetFolderPathというのを使うのではと思い、試してみたのですが、
できませんでした。
まだ、説明がまずいかもしれませんが、一生懸命考えました。よろしく
お願いします。
VB.Netのことはよく知りませんが、VB6の
App.Pathではマイドキュメントは取れませんが?
WSHを使うなら、
WScript.Shell.SpecialFolders("MyDocuments")
とか・・・。
APIでレジストリの
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserShellFolders\Personal
あたりをひっぱるとか・・・。
> 多分、GetFolderPathというのを使うのではと思い、試してみたのですが、
できませんでした。
あれ? それで取得できると思いますが…。
TextBox1.Text = Environment.GetFolderPath
(Environment.SpecialFolder.Personal)
という感じですよね。
Sayさん、魔界の仮面弁士さん。お世話になります。
TextBox1.Text = Environment.GetFolderPath
(Environment.SpecialFolder.Personal) & "\yama.xls"
でTextBox1には確かに表示され、うまくいきました。
ところが、いざ実行してみると
「C:Documents.xls」「and.xls」「setting.xls」・・・
というふうに別々にエクセルブックが開くようになりました。
それは、呼び出し方に問題があるのだと思います。
具体的には、どのような呼び出し方をしていますか?
とみーさんのコードを見せてください。
こちらの環境では、ProcessクラスのStartメソッドに、
空白を含んだファイル名を渡しても、正しくExcel 2002で起動されました。
Dim P As New Process()
P.Start("C:\Documents and Settings\username\My Documents\Book1.xls")
また、COM Interopで Workbooks.Open する場合も
空白を含んだパスでも問題ありませんでした。
魔界の仮面弁士さん、お世話になります。
下のコードだとうまくいきます。(この場合、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)
よろしくお願いします。
コマンドラインで実行する時、スペースの含まれるパスを指定するときは
前後をダブルクォーテーションで括る必要があったと思います。
試してませんが、下記でどうでしょう?
Shell(oExcel.Path & "\excel.exe """ & filename & "\yama.xls""", 1)
あれ? 何故、Shell関数を使っておられるのでしょうか。
折角、CreateObjectしたなら、そこからWorkbooks.Openメソッドで
開いてやれば良いと思いますよ。
# とはいえ、ファイルをExcelに開かせるのだけが目的ならば、
# Processクラスを使えば済みますので、わざわざ、低速な
# COM Interopに頼る必要も無いように思えます。
もしShellで行うなら、空白を含んだ引数(ファイル名)の前後を「"」で囲むか、もしくは、
ファイル名をショートファイル名で指定する必要があるのではないでしょうか。
Sayさん、nanashiさん、魔界の仮面弁士さん、ありがとうございました。
無事解決しました。
最初からコードを見ていただければよかったですね。お手数をおかけしました。
初心者のため、これからも いろいろな本を読んだり、ここの掲示板をお借
りして知識を増やしていきたいと思っています。
これからもよろしくお願いします。
ツイート | ![]() |