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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー 2 2023/05/17 17:02
- Excel(エクセル) Excel VBA 指定セルに入力されているパスからシートをコピーして別のブックに転記するVBAのコ 2 2022/04/19 15:53
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
バッチファイル 二つ上のディ...
-
エクセルのマクロで特定フォル...
-
Excel 相対パス
-
EXCEL(VBA)で指定フォルダ内の...
-
A列に記載されているフォルダ...
-
エクセルVBAで一つ上の階層...
-
VBA★PDFをPDFアプリで印刷し...
-
xcopyコマンドの進行状況を表示...
-
SaveAsの保存先について
-
VBAでパワーシェルを実行したい...
-
ExcelVBAの使い方 ¥の使い方...
-
指定したフォルダ内の最新ファ...
-
ExcelのVBAで上書き保存を確...
-
パワーポイントのpptファイ...
-
取り込むファイルのファイル名...
-
ACCESSからEXCEL起動時、パス名...
-
アプリケーションのインストー...
-
opencvプログラミング エラー
-
fopenでのパス指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
バッチファイル 二つ上のディ...
-
Excel 相対パス
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
【VB.NET】App.configにファイ...
-
SaveAsの保存先について
-
ExcelVBAの使い方 ¥の使い方...
-
エクセルのマクロで特定フォル...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
VBA一覧取得 再投稿
-
指定したフォルダ内の最新ファ...
-
ExcelのVBAで上書き保存を確...
-
VBAでパワーシェルを実行したい...
-
コマンドプロンプトのコピー関...
-
VBA★PDFをPDFアプリで印刷し...
-
アプリケーションのインストー...
-
開いているファイルを削除し、...
-
A列に記載されているフォルダ...
おすすめ情報