
ACCESS2003からEXCEL2003をVBAで起動するコードを書いてます。
SetApplName = "c:\Program Files\Microsoft Office\office11\excel.exe /r c:\docume~1\alluse~1\docume~1\毎日の数字.xls"
Call Shell(SetApplName, 1)
のように指定していますが、いちいち短い名前を指定しないと
いけないようで、面倒で困っています。
長いパス名を短いパス名に変換するような関数等はありませんか?
他にもっと簡便な方法があればあわせてご教示ください。
No.5ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。Shell に渡すパスに空白があるとそこでコマンド区切りとして解釈され、誤動
作します。8.3 形式のショートパスを使う理由はそこにあるのですが、空白を
含むロングパスであってもパスを ”” で括れば OK です。
もちろん、ロングパスとショートパスの相互変換は API を使えば可能ですが...
Shell で Excel を起動する理由は?
ご提示のコードだと、Excel のバージョンやインストールパスなどが変われば
動かないコードになってしまいますよ? 例えば、
Excel2002 C:\Program Files\Microsoft Office\Office10\Excel.exe
Excel2003 C:\Program Files\Microsoft Office\Office11\Excel.exe
のように、標準インストールでもバージョンでフォルダ名が違うし、D:\ などの
別ドライブにインストールされる可能性もあるので、レジストリから Excel.exe
のパスを調べるハメになりますね。
Access + Excel の連携なら CreateObject か GetObject が一般的に使われる
方法だと思います。単に読み取り専用で開きたいだけなら、下記のようなコード
になります。
Sub Sample()
Dim xlApp As Object ' Excel.Application
Dim Wb As Object ' Excel.Workbook
Set xlApp = CreateObject("Excel.Application")
With xlApp
' 可視化
.Visible = True
' ブックを読み取り専用で開く
Set Wb = .Workbooks.Open( _
FileName:="C:\Sample.xls", _
ReadOnly:=True)
' 処理
' イミディエイトウインドウにブック名を表示してみる
Debug.Print Wb.Name
End With
' ※1 Excel を開いたままプロシージャを終了する場合
Set Wb = Nothing
Set xlApp = Nothing
' ※2 ブックを閉じ Excel も終了させる場合
' オブジェクト変数の開放をちゃんとしないと Excel を
' xlApp.Quit で終了させても プロセス が残ってしまう
'Wb.Close
'Set Wb = Nothing
'xlApp.Quit
'Set xlApp = Nothing
End Sub
No.6
- 回答日時:
No.1です。
APIの宣言が必要です。Public Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
No.4
- 回答日時:
どちらかというと、
いちいち短い名前を指定しないといけないのではなく、
Excelへ渡す引数に空白を含むパスを与えると、誤動作するからでしょう。
ダブルコーテーションの中にさらにダブルコーテーションを含める場合は、
2つ続けて記しますので、
"""c:\Program Files\Microsoft Office\office11\excel.exe"" /r ""空 白 を含むフォルダや\ファ イル 名.xls"""
で上手くいくと思います。
No.3
- 回答日時:
s_husky です。
補足します。' ----------------------------------------------------------------------------------------
' 共通記号定数
' ----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
'
' Rounds関数用
'
Public Const 四捨五入 = 0
Public Const 切り捨て = 1
Public Const 切り上げ = 2
広域記号定数の場合です。
No.2
- 回答日時:
プログラムコードにパス情報を書くのは、一種のマジックナンバーの埋め込みに等しい作法かと思います。
ですから、
Const conExcelPath = "c:\Program Files\Microsoft Office\office11\excel.exe /r "
Const conBookName = "c:\docume~1\alluse~1\docume~1\毎日の数字.xls"
と、モジュールで定義し、
Call Shell(conExcelPath & conBookName, 1)
と書けば宜しいかと・・・。
No.1
- 回答日時:
関数GetshortPathNameで取得できませんか?
Dim strLongPath As String
Dim strShortPath As String * 255
Dim lngRet As Long
Dim lngSiz As Long
strLongPath = strlName
lngSiz = Len(strShortPath)
lngRet = GetShortPathName(strLongPath, strShortPath, lngSiz)
usrShortNameGet = Trim(Left(strShortPath, InStr(strShortPath, Chr(0)) - 1))
ご回答ありがとうございました。
GetShortPathNameという関数はACCESS2003にはないようですが、
何かセットアップが必要なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
コマンドプロンプトのコピー関...
-
xcopyコマンドの進行状況を表示...
-
Eclipse
-
VBAとロングファイル名
-
ACCESSからEXCEL起動時、パス名...
-
ルミーズショッピングカート
-
アクセス 自身のデータベース...
-
ExcelのVBAで上書き保存を確...
-
エクセルでパスを含んだファイル名
-
VBAでパスを取得した後、分割し...
-
VBAでパワーシェルを実行したい...
-
visual studio 2010のワーニング
-
VBAで、VBのapp.pathと同じ機能...
-
EXCEL(VBA)で指定フォルダ内の...
-
Excel VBA
-
Windowsファイルパスの妥当性に...
-
fopenでのパス指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
Excel 相対パス
-
実行ファイルのパスを取得したい
-
コマンドプロンプトのコピー関...
-
【VB.NET】App.configにファイ...
-
エクセルのマクロで特定フォル...
-
VBA★PDFをPDFアプリで印刷し...
-
ExcelVBAの使い方 ¥の使い方...
-
fopenでのパス指定
-
ExcelのVBAで上書き保存を確...
-
EXCEL(VBA)で指定フォルダ内の...
-
C#でのProcess.Startと変数path
-
【VBA】ExcelマクロでCSVファイ...
-
VBAでパワーシェルを実行したい...
-
A列に記載されているフォルダ...
-
初心者powershellのPS1ファイル...
-
Eclipse
-
VBAとロングファイル名
おすすめ情報