Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
フォームボタン作成時のOnActionの記述制限?について
投稿日時: 21/09/14 09:18:02
投稿者: QooApp

いつもお世話になっております。
 
プログラムにてフォームボタンをシート上に作成しているのですが、ファイル名名規則と思しきエラーで保存できない場合があり、ご相談です。
 
'フォームボタン作成
With ActiveWorksheet.Buttons.Add(////---サイズと設置位置の設定は割愛します---////)
    .OnAction = "ブック名" & "!MacroFunctionName"
    .Characters.Text = "マクロボタン"
End With
 
ブック名「A&B〇〇について.xlsm」の時、
「&(アンパサンド)」を含むファイル名の場合、
上記「OnAction = "*"」で設定するときにエラーが発生します。
 
エラーテキストは「400」で
ステップは.OnActionの時に失敗します。
 
 
現状、アンパサンド無しのファイル名では正常に出力ができますが、
このような場合回避方法がありますでしょうか。
 
アンパサンドの代わりにアルファベットで「and」と記述してはだめか?と上司に相談したら
上司の上司から却下されてしまいました。
 
VBを記述しているブックとフォームボタンを設置して保存するブックが別々のファイルなので
どのブックに記載されている関数を呼び出すか明記する必要があるようです。(もしかして不要でしょうか?)

回答
投稿日時: 21/09/14 10:38:18
投稿者: たらのり

こんにちは
 
直接の回答ではないのですが
 
いま使っているのが Windows ではないので確認できないのですが,
コマンドプロンプトで複数のコマンドを連続して実行する場合,
& で区切ります。
 
> コマンド1 & コマンド2
 
このように記述すると 2つのコマンドが連続で実行されます。
 
副作用のない上手い例がすぐには思いつかないのですが,
 
> dir & dir
 
とすると,同じこと(dir の実行)が二度繰り返されます。
 
この & がファイル名に含まれる場合,ファイル名の全体を
二重引用符で括れば問題ないのですが,そうでない場合は
コマンドを連結するオペレータと間違えられてしまうので,
ファイル名に & はなるべく含めない方がよいかもしれません。
 
# 引用符でファイル名を括らない場合,ファイル名が分断され,
# & 以降の文字列はコマンド名と解釈される
# 全角の & なら問題ないかもしれませんが分かりません
 
勘違いだったらスミマセン

回答
投稿日時: 21/09/14 10:42:17
投稿者: sk

引用:
ブック名「A&B〇〇について.xlsm」の時、
「&(アンパサンド)」を含むファイル名の場合、
上記「OnAction = "*"」で設定するときにエラーが発生します。

引用:
.OnAction = "ブック名" & "!MacroFunctionName"

.OnAction = "'A&B〇〇について.xlsm'!MacroFunctionName"
 
-----------------------------------------------------------------
 
以上のように、ブック名をシングルクォーテーション(')で
囲めばよろしいのではないかと。

投稿日時: 21/09/14 12:24:03
投稿者: QooApp

たらのり様
sk様
 
ご思案いただきありがとうございます。
シングルコーテーションで囲うことが必要と知り、あれこれ試していたところ、
 
.OnAction = Cstr("'" & ブック名 & "'!関数名")
 
と、Cstr関数で囲ったらうまく動作しました。
ワークブック変数の.Nameプロパティからファイル名を取得し、前後にシングルコーテーションを含む記述をしていたのですが、それだけではどうも動作しませんでした。
 
よくわからないですが、シングルコーテーションで囲うだけではなく、
変数にいったん代入して入力するか、Cstr関数のような結合処理を挟むとうまくいくことがわかりました。
 
本当にありがとうございます。