OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBAとロングファイル名

  • すぐに回答を!
  • 質問No.187860
  • 閲覧数511
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 94% (80/85)

EXCELのVBAで、「C:\My Documents」のようなロングファイル名を
「C:\Mydocu~1」のような昔のファイル形式にする方法を教えてください。

例えば
ThisWorkbook.Pathで得たパス名がロングファイルだった場合です。


目的は、ある古い別アプリをShellで起動させたいのですが、それの
引数に昔のファイル形式で色々なパスを渡さないといけないのです。
(そのアプリがロングファイル名に対応していない)

ヘルプとか見たんですけど分からないので教えてください。
お願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

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)
補足コメント
sheeps

お礼率 94% (80/85)

宣言からしますと、

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」しかでないし
困ってしまってます。
投稿日時 - 2001-12-20 00:37:59
お礼コメント
sheeps

お礼率 94% (80/85)

回答有難うございます。

残念ながら、まだ解決はしてませんのでお手すきの時に
補足を見ていただければ幸いです。
投稿日時 - 2001-12-20 00:37:53
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2

 えーと、このまま使っても実在するファイル名がなければ正しい答えを返し てくれません。GetShortPathNameでは結果的にディスクに記録された8+3 形式のファイル名を吐き出してくれるだけですから実在しないと何も返しませ ん。 "Z:\My Document\audio.wav" を実在するファイル名に変えてください。 ...続きを読む
 えーと、このまま使っても実在するファイル名がなければ正しい答えを返し
てくれません。GetShortPathNameでは結果的にディスクに記録された8+3
形式のファイル名を吐き出してくれるだけですから実在しないと何も返しませ
ん。

"Z:\My Document\audio.wav"

を実在するファイル名に変えてください。
お礼コメント
sheeps

お礼率 94% (80/85)

お礼が遅れてすみません。

最初の回答をヒントに、なんとか解決できました。
有難うございました。
投稿日時 - 2001-12-27 14:24:03
  • 回答No.3
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。maruru01です。 tnakさんの回答の間違いを。 多分単なるタイプミスだと思いますが、 GetShortPathName "Z:\My Document\audio.wav", ShortName, 512 を、以下のようにします。 GetShortPathName "Z:\My Document\audio.wav", File ...続きを読む
こんにちは。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)

横から口を出してすみません。
では。
お礼コメント
sheeps

お礼率 94% (80/85)

お礼が遅れてすみません。

頂いた回答を元にコードをブラッシュアップさせていただきます。
ありがとうございました。
投稿日時 - 2001-12-27 14:26:56
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ