• ベストアンサー

ショートカットExellファイルのオープン

お世話になっています。 カレントフォルダにあるExcelファイルを開くには次の関数を作成して実現しています。 Function ExWorkbooksOpen(myOpenXlsName As Variant) Dim myWb As Workbook Dim totoFullName As Variant Set myWb = ActiveWorkbook totoFullName = myWb.Path & "\" & myOpenXlsName Workbooks.Open Filename:=totoFullName Set myWb = Nothing End Function この方法ですと、別のフォルダにあるExellファイルを開く事はできません。 そこで、ショートカットファイルをカレントフォルダへ置いて開く事を考えていますが、どの様にオープンしていいのか分かりません。 アドバイスをよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • korin_
  • ベストアンサー率69% (46/66)
回答No.2

こんにちは。 Excelのショートカットファイルのフルパスは以下の方法で取得出来ます。 ご参考にどうぞ。 Dim WshShell As Object Dim oShellLink As Object Set WshShell = CreateObject("WScript.Shell") Set oShellLink = WshShell.CreateShortcut("D:\hoge.xls へのショートカット.lnk") MsgBox oShellLink.TargetPath ' ←Excelへのフルパス

tt246
質問者

お礼

ご丁寧にありがとうございます。 この方法をベースに進めたいと思います。 感謝致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • korin_
  • ベストアンサー率69% (46/66)
回答No.4

こんにちは。 #3の方に対する返答になってしまいますが、お許しください。 #2では、ショートカットへのオブジェクト参照を作成して、その参照からExcelファイルのフルパスを取得しているだけで、ショートカット自体を作成しているわけではありません。 ショートカットを作成するには確かにSaveが必要ですが、先に作成しておいたショートカットからフルパスを取得するだけであれば、Saveは不要のはずです。 この質問者の方の場合、カレントフォルダに手作業で作成したショートカットファイルを置くことを前提にしているのだと思います。 (Excelファイルへのフルパスがユーザーによって変えられてしまう、というお話がありますから) ですので、ショートカットを作成するためのSaveメソッドは不要と思います。 何か私が勘違いしていたらごめんなさい。 蛇足失礼しました。

tt246
質問者

お礼

補足ありがとうございます。 おっしゃる通り、手作業でショートカットファイルを作成して、 それをカレントフォルダへ移動して使用する予定です。

全文を見る
すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

Ano2氏の回答ようにして 新たにlnkファイルを作成して TargetPathプロパティを設定し 作業(カレント)フォルダーを指定する場合はWorkingDirectoryにパスを設定します Saveメソッドでプロパティをlnkファイルに設定しましょう Saveをし忘れるとせっかく設定したデータが失われることになります

tt246
質問者

お礼

ありがとうございます。 まだVBAでlnkファイルを作成する所までは考えていませんが、 次のステップ(No2が実現した後)で色々試してみたいとは思います。

全文を見る
すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

フルパスが分かっているならtotoFullNameへの代入を工夫するだけなのでは たとえば Function ExWorkbooksOpen(myOpenXlsName As Variant, Optional sPath as String = "")   Dim myWb As Workbook   Dim totoFullName As Variant   Set myWb = ActiveWorkbook   if sPath = "" then     totoFullName = myWb.Path & "\" & myOpenXlsName   else     totoFullName = sPath & "\" & myOpenXlsName   end if   Workbooks.Open Filename:=totoFullName   Set myWb = Nothing End Function といった具合に パスも渡すようにしてやるとか

tt246
質問者

お礼

ご回答ありがとうございます。 職場の共有フォルダを参照するのですが、 このフルパスが時々変わられてしまいます。 システムを知らない人が共有を管理している為です。 変更された時に、VBAのソースを直すのが難点で、 出来れば、ショートカットファイルのリンク先アドレスを 読み取る方法でも良いのですが。 ご提案の方法は一つの選択肢として参考にしたいと思います。 深夜にも関わらずありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • エクセルvba

    エクセルvbaなのですが Sub test() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) 'コード・・・ Set xlApp = Nothing Set xlBook = Nothing End Sub これだと Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) の部分で、エラーになります。 実行時エラー1004です。 自身ファイルをオブジェクトに格納して操作したいのですがどうすればいいでしょうか?

  • CreateObjectとGetObjectの違い

    当方エクセル2003です。 Sub test_CreateObject() Dim App As Excel.Application Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub --------------------------------------------------------- Sub test_GetObject() Dim App As Excel.Application Dim MyFileName As String Set App = GetObject(, "Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub この二つは何が違うのでしょうか? どちらも既存のエクセルファイルがが開きます。

  • SETを使ったほうがよい?

    accwessからエクセルファイルを開きたいのですが、 App.Workbooks.Open と、 Set xlBook = xlApp.Workbooks.Open とどちらを使った方がいいのでしょうか? ////////////////////////////////////////////////////////// Private Sub ファイル1_Click() Dim App As Object Dim MyFileName As String MyFileName = "D:\My Documents\test.xls" Set App = CreateObject("Excel.Application") App.Workbooks.Open FileName:=MyFileName App.Visible = True End Sub でも Private Sub ファイル2_Click() Dim xlApp As Object Dim xlBook As Object Dim FileName As String Const FolderName = "D:\My Documents\test.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(FolderName & FileName) xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ////////////////////////////////////////////////////////// でも開けました。 多分、SETを使うかどうかの違いだと思うのですが VBAでコードを作る際、どちらのコードを使った方がいいか教えてください。

  • Excel VBA: 自動でxlsファイルを開くマクロでメッセージが現れたとき自動でボタンを押す方法

    自動で同ディレクトリ内のxlsファイルを開くマクロを作っています。 開きたいファイルにリンクが張られてあると、「リンクを更新しますか?」という類のメッセージウィンドウが現れるのですが、マクロでこれを自動的に「Yes」「No」と答えるにはどうしたらよいのでしょうか。一応、下のマクロでファイルを開こうとするとこまではできてます。  Sub update() Dim DataFile As Workbook Dim fn As String fn = "Link.xls" Set DataFile = Workbooks.Open(FileName:=ThisWorkbook.Path & "\" & fn) Set DataFile = Nothing End Sub

  • EXcelマクロで同じフォルダ内のファイル全て開く。ドライブまたいでも対応

    以前以下のVBAを教えていただいたham-kamoさんに質問があります。もちろん違う方でも構いません。 「同じフォルダ内のブックを開くマクロ」についてですが、以下のVBAだとカレントフォルダをオプションで違うドライブに設定しているとうまく動作しないのですが、解決法はありますでしょうか? 例えば\\AAAA\BBというアドレスのフォルダ内にマクロを起動するファイルがあり、C:\Documents and Settings\XXXXがカレントフォルダに設定されるとC:\Documents and Settings\XXXX内のExcelファイルが開かれてしまうということです。 -------------------------- Sub OpenAllBooks() Dim FileName As String Dim OpenedBook As Workbook Dim IsBookOpen As Boolean ChDir (ThisWorkbook.Path) FileName = Dir("*.xls") Do While FileName <> "" IsBookOpen = False For Each OpenedBook In Workbooks If OpenedBook.Name = FileName Then IsBookOpen = True Exit For End If Next If IsBookOpen = False Then Workbooks.Open (FileName) End If FileName = Dir() Loop End Sub

  • エクセルからWordファイルをオープン

    Excel VBAで、雑誌を参考に、次の様に作りました。 Function EwWordWordOpen(totoFullName As Variant)   Dim objWordApp As Word.Application   Set objWordApp = CreateObject("Word.Application")   objWordApp.Documents.Open (totoFullName)   Set objWordApp = Nothing End Function ↑の方法ですと、次の動作となります。 1回目は何もしない。 2回目以降は、「ファイルがロックされています。読取専用で開きますか」のMsgBoxが表示されて、OKを入力するとWordを読取専用で開きます。 次に4行目のOpen行を   objWordApp.Documents.Open (totoFullName), ReadOnly:=True とすると、このステートは無視される様で何も行なわれません。 正しく、Wordファイルを開く方法を教えて頂きたく、よろしくお願いします。

  • ACCESS VBAで作成済のExcelのコピーを作りたい

    ACCESS VBAで作成済みのExcelファイル (複数シートがあります)の コピーを作成し そのファイルでテーブルのデータを 出力したいと思っています。 シートが1つならできましたが シートが複数あるとできません。 できる方法を教えてください。 なおシートが一つの場合は、下記でできました。 Dim oXLS As New Excel.Application Dim NewBook As Excel.Workbook oXLS.Workbooks.Open Filename:=既存ファイル名 oXLS.ActiveWorkbook.Sheets(シート名).Copy Set NewBook = oXLS.ActiveWorkbook oXLS.Workbooks(ファイル名).Close 複数シートがある場合の 作成方法を教えてください。 よろしくお願いします。

  • ブックの選択について

    ブックの選択について 以下のように、マクロのあるブック意外のブックを開いて からマクロのあるブックを選択しようとしてもできません。 具体的には一番下の Workbooks(thisBook).Select が正常に動きません。 なぜでしょうか? Dim myFName As String Dim macrobook As Object Dim thisBook As Workbook Set thisBook = ThisWorkbook myPath = ActiveWorkbook.Path ChDir myPath myFName = Dir("*S*.xls") Workbooks.Open Filename:=myFName Workbooks(myFName).Activate Worksheets(1).Select Workbooks(thisBook).Select