- ベストアンサー
VBAとロングファイル名
EXCELのVBAで、「C:\My Documents」のようなロングファイル名を 「C:\Mydocu~1」のような昔のファイル形式にする方法を教えてください。 例えば ThisWorkbook.Pathで得たパス名がロングファイルだった場合です。 目的は、ある古い別アプリをShellで起動させたいのですが、それの 引数に昔のファイル形式で色々なパスを渡さないといけないのです。 (そのアプリがロングファイル名に対応していない) ヘルプとか見たんですけど分からないので教えてください。 お願いします。
- sheeps
- お礼率94% (80/85)
- その他(プログラミング・開発)
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
GetShortPathNameというAPIを使用します。VBAではAPIを使用する前に定義を 書く必要があります。定義は次の通りです。 Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" ( _ ByVal LongPath As String, _ ByVal ShortPath As String, _ ByVal ShortPathSize As Long) As Long 以下はサンプルです。 Dim FileName As String * 512 GetShortPathName "Z:\My Document\audio.wav", ShortName, 512 MsgBox Left(FileName, InStr(FileName, vbNullChar) - 1)
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 tnakさんの回答の間違いを。 多分単なるタイプミスだと思いますが、 GetShortPathName "Z:\My Document\audio.wav", ShortName, 512 を、以下のようにします。 GetShortPathName "Z:\My Document\audio.wav", FileName, 512 あと、第3引数の文字列長は、 Len(FileName) とした方がいいかも知れません。(変数宣言での文字列長の指定値を変えた時にいちいち変えなくても済みますから。) ちなみに、戻り値をつけるなら()がいると思います。 lRet = GetShortPathName ("Z:\My Document\audio.wav", ShortName, 512) 横から口を出してすみません。 では。
お礼
お礼が遅れてすみません。 頂いた回答を元にコードをブラッシュアップさせていただきます。 ありがとうございました。
えーと、このまま使っても実在するファイル名がなければ正しい答えを返し てくれません。GetShortPathNameでは結果的にディスクに記録された8+3 形式のファイル名を吐き出してくれるだけですから実在しないと何も返しませ ん。 "Z:\My Document\audio.wav" を実在するファイル名に変えてください。
お礼
お礼が遅れてすみません。 最初の回答をヒントに、なんとか解決できました。 有難うございました。
関連するQ&A
- EXCELのVBAのコマンドボタンの動作について
EXCELのVBAでコマンドボタンを押したとき、あるテキストを、単にテキストとして開く為に、以下のコーディングをしました。 しかし、「shell」コマンドは実行形式でないといけないようで、うまく行きません。どなたか、判る方いらっしゃいますか? --------------------------------------------- wk_path = ThisWorkbook.Path & "\memo1.txt" wk_rc = Shell(wk_path, vbNormalFocus) --------------------------------------------- (エラーコード:メッセージ) 5:プロシジャーの呼び出し、または引数が不正です。
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBA実行時のエラー:DLLファイルが見つ
タイトル:エクセルVBA実行時のエラー:DLLファイルが見つかりません 質問させていただきます。どうぞよろしくお願いいたします。 環境:PC1~3の全てが、Excel2010、Win7になります。 初めてVBAから読み込むためのDLLファイルを作成いたしました。 PC1上で動作確認できている2つのファイル(Test4.dll(VC++2013にて作成)と それを呼び出すVBAのついたエクセルファイル)を、 PC2とPC3に移動し、VBAを実行しましたところ 何故かPC3でのみ下記エラーが発生いたします。 >実行時エラー'53' >ファイルが見つかりません。Test4.dll ・2つのファイルは同じフォルダ内で実行しております。 ・VBAのカレントパスは ChDrive Left(ThisWorkbook.Path, 1) ChDir ThisWorkbook.Path で変更しております。 試しにC:\Windows\System32と C:\Windows\SysWow64にも Test4.dllをコピペしてみましたが、同じエラーが出てまいります。 ・PC3のみ違うところを探してみましたが、思いつくのは下記くらいでございます。 1.VSが入っておりませんでした。(必要なのでしょうか??) 2.実行しているパスが違います。 PC1とPC2の実行パス: D:\Users\Administrator\Documents\VBA_TEST PC3の実行パス: D:\Documents\VBA_TEST もし何か原因として思いつかれる事がございましたらお教えいただけないでしょうか。 お詳しい方がいらっしゃいましたら何卒よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- VBAエクセル・・・フォルダ名を取得する
VBA初心者です。 マクロで、ヘッダー部分にフォルダ名を入力したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Path にすると、パスが出てきますが、 \C:\***\△△△\○○○\XXX.xls だとすると、「○○○」だけを入力したいのですが・・・ よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- アプリケーションのあるファイル名を取得
VBプログラミングをしているのですが、 その本体がある場所のファイル名を取得したいのですが、なにかよい方法はあるでしょうか? たとえば 本体.exeまでのフルパスが C:\Documents and Settings\Administrator\My Documents\ファイルA\本体.exe としたら C:\Documents and Settings\Administrator\My Documents\ファイルA までを取得したいのです。 世ろ紙お願いいたします。
- ベストアンサー
- Visual Basic
- Excelのマクロでファイル情報の取得方法(更新日付情報付)
現在Excelのマクロで 「指定フォルダの中のファイルで指定日より前のファイルを自動削除する」 マクロを作成中なのですが、現在指定ディレクトリ内のファイル情報の取得の部分で困っています。 ・dir() ではファイル名は取れるが(私の調べた限りでは)日付情報が取れない ・shellでdirコマンドを発行しようとすると、ディレクトリがロングファイルネームでひっかかってしまい、そのままではエラーになる。 例【shell("command.com /c dir c:\Documents and Settings > 結果.txt")】 といった状態です。 最悪ロングファイルネームをすべてDOSルールに変換してshellコマンドで発行するテもあるかと思いますが、略時に同じ名前が重ならないか(mydocu~1で良いのかmydocu~2になるのか)等で管理が煩雑になりそうです。 マクロ上でファイル名と最終更新日付を取得できる方法がご存知の方がいらっしゃいましたら教えてください。 尚、指定ディレクトリ名の取得~削除の実行、ログの作成あたりは殆ど出来上がっています。
- ベストアンサー
- オフィス系ソフト
- Word VBAのコードのファイル名
WordのVBAで、今動いているコードの入っているファイルのフルパスを取得するにはどうすればいいですか? そのモジュール(ファンクションやサブルーチン)を持っている(記録されている)のがドキュメントでもテンプレートでもアドインでも、そのファイルのフルパスを知りたいのですが。
- ベストアンサー
- Visual Basic
- シンクライアントでのVBAによるファイル保存
ExcelのテンプレートファイルにVBAマクロを記述しています。 VBAにより新しいブックを開き、データを作り込んだ後、テンプレートファイルが置かれているフォルダに保存するマクロを作成しました。 リッチクライアント上では問題なく動くのですが、シンクライアント上で実行すると、 ActiveWorkbook.SaveAs Filename:='フルパスのファイル名' ※フルパスのファイル名は、"C:\folder\file.xlsx"というような形式になっています。 のところでエラーになってしまいます。 パス付きのファイル名について、作法があるようでしたらお教えいただけますか。 よろしくお願い致します。
- 締切済み
- Excel(エクセル)
- VBAでの " の使い方をお教え下さい
ThisWorkbook.SaveAs Filename:="C:???.xlsm"(???はファイル名です)をVBAの式に直す方法をお教えください。なお、???はセルを参照することにしています。具体的にはRange("O1")です。 ThisWorkbook.SaveAs Filename:="""C:" & "Range(""O1"").xlsm"""とすると、ファイル名に : は使えないというエラーメッセージが出ました。 " の使い方が分かりづらく、悩んでいます。正しい使い方はどのように考えれば良いかも教えていただければ幸いです。よろしくお願いします。
- ベストアンサー
- Visual Basic
- フォルダ名とパス名の違うフォルダの作り方
例えば、C:\Documents and Settings\<ユーザー名>\My Documents\My Pictures の場合、一番最後のサブフォルダ名が、[My Pictures] とパス名と同様に適用されます。 これを上記の場合、[マイ ピクチャ] になります。 こんな感じに、フォルダ名とパス名の違うフォルダの作り方を教えて下さい。
- 締切済み
- Windows XP
- VBAで特定のフォルダ内のエクセルファイルをPDF
VBAで特定のフォルダ内のエクセルファイルをPDFに変換する作業しているのですが Filename:=ThisWorkbook.Path & "\" & Replace(f.Name, fs.GetExtensionName(f.Path), "pdf"), _ 出来上がったファイル名を コード_日付にしたく Filename:=ThisWorkbook.Path & "\" & ("コード") & Range("B9") & ("_") & Format(Now, "yyyymmdd") & ".pdf", _ に入力したのですがB9セルのコードが入りません。 どこが間違っているのでしょうか?
- 締切済み
- Visual Basic
お礼
回答有難うございます。 残念ながら、まだ解決はしてませんのでお手すきの時に 補足を見ていただければ幸いです。
補足
宣言からしますと、 Dim FileName As String * 512 Dim ShortName As String Dim lRet As Long lRet = GetShortPathName "Z:\My Document\audio.wav", ShortName, 512 で使い方合ってますか? lRet = 0 ShortName ="" で戻ってきちゃうんですよ。 MSのHPで検索してもC言語の「GetShortPathName」しかでないし 困ってしまってます。