プロが教えるわが家の防犯対策術!

標題の件、VBAにて指定するフォルダパスに半角スペースがあると
VBAが動きません。半角スペースをそのまま、VBAにて書いても
動きません。

フォルダパスにおける、半角スペースはどのように書けば
良いでしょうか。なお、下記のVBAは、フォルダパスに半角スペースが
無ければ、普通に動きます。

ご存じの方、教えて下さい。

【VBA】
内容:フォルダAを開く
指定したフォルダを開く()

【フォルダパス】
C:\Users\2020\Desktop\㉖ あいうえお
㉖とあいうえおの間に半角スペースがあります



【VBA】

Sub 指定したフォルダを開く()


CreateObject("WScript.Shell").Run "C:\Users\2020\Desktop\" & ChrW(12886) & "あいうえお\フォルダA"


End Sub

A 回答 (5件)

>●↓定数の宣言ですが、どういう意味ですか?



定数 プログラムの中で変更できないもの
変数 プログラムの中で自由に代入により変更できるもの

定数は Dim(または Private, Puclic等のキーワード) の代わりに Const を使います。
モジュールレベル、またはグローバルレベルで使うことが多い。
また、歴史的な慣習で全て大文字で名前を付けることが多いです。変数との区別のため。

例えばプログラム全体に Worksheets("入力") が100箇所あったとします。
仕様変更でシート名が「顧客マスタ」になった。

という状況でプログラム中に記載された100箇所を全て訂正するのか、行頭の定数のとこだけ修正するだけで済むのかということです。
ソースのメンテナンス性や、可読性の良さは定数を使った方が分かりやすくなります。

>半角スペースを宣言しているのですか?
違います。ダブルクウォート「"」を定義しています。
ダブルクウォートはプログラム的に特別な意味をもつ記号なので、そのまま書くとコンパイルエラ-になります。
それを防ぐにはエスケープといって「"」を重ねれば良いのですが、これを定義しないで直接書くと

CreateObject("WScript.Shell").Run """" & path & """"

となり、何をやってるのかパッと見でわかりにくいため、定数をオススメしてます。

>●pathの前と後ろを宣言した定数WQとつなげていますがどういう意味でしょうか。

半角SPで分割されて Shell にパラメータが渡るため、パスは括らないといけません。
例えば C:\Program Files を括らないと

Shell には C:\Program がパスとして渡ってしまいます。ダブルクウォートで括ると途中半角SPがあってもこれを回避できます。
    • good
    • 1

No2です。



ごめんなさい。ねぼけてました。
Shellで実行しているのを見落としていました。

No3様の回答の通りですね。
大変失礼いたしました。
    • good
    • 0

こんにちは。



Shell にパスを渡す場合は、ダブルクウォートで括って下さい。

  C:\Program Files

みたいにパスは普通に半角SPが入ります。デフォで括って下さい。
コマンドラインでプログラムを起動するとき、半角SPがパラメータ区切りになりますが、それです。Shell は半角SPの前と後で分割して別パラメータと解釈しようとします。

→だからダブルクウォートで括る

”””” と4つダブルクウォートを重ねてVBEに書いてもいいけど、見づらいので定数(今回は Const WQ のとこ)に定義した方が良いでしょう。


Const WQ = """"

Sub sample()
  Dim path As String
  path = "C:\Users\2020\Desktop\" & ChrW(12886) & " あいうえお"
  CreateObject("WScript.Shell").Run WQ & path & WQ
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。動きました。
質問なのですが、下記2点、教えて下さい。

なお、勉強不足かと思うのですが、何について
勉強すれば、下記vbaを理解できますか?

教えて下さい。宜しくお願いします

●↓定数の宣言ですが、どういう意味ですか?
半角スペースを宣言しているのですか?

Const WQ = """"

●pathの前と後ろを 宣言した定数WQとつながていますが
どういう意味でしょうか。

CreateObject("WScript.Shell").Run WQ & path & WQ

お礼日時:2022/08/05 04:33

No1です



試してみましたが、半角スペースなら動作します。
想像するところ、半角スペースではないのでは?
キャラクタコードを調べてみてはいかがでしょうか。
    • good
    • 0

こんばんは



>"C:\Users\2020\Desktop\" & ChrW(12886) & "あいうえお\フォルダA"
半角スペースを抜いているから、違うディレクトリと判断されているだけでは?
    • good
    • 0
この回答へのお礼

スペースを下記のとおり、普通に入れるとエラーにて動きません。

【フォルダパス】
C:\Users\2020\Desktop\㉖ あいうえお


【スペースなし】
CreateObject("WScript.Shell").Run "C:\Users\2020\Desktop\" & ChrW(12886) & "あいうえお\フォルダA"


【スペースあり】
CreateObject("WScript.Shell").Run "C:\Users\2020\Desktop\" & ChrW(12886) & " あいうえお\フォルダA"

お礼日時:2022/08/04 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A