Excel2010で以下のようにwindowsオブジェクトのcaption判定をしているのですが、
エクセルで表示される名前とcaptionの値が不一致になります。
wd.Captionの値をwatchしたところ、
wd.Caption:(GIP)エクセルシート・・・・.xls
wName :[GIP]エクセルシート
と、”[]”が”()”に変わってました。
エクセル内のウィンドウの左上で表示されるのは、[GIP]エクセルシート・・・.xlsと
表示されてるのですが、何故かcaptionの値だけ違っており、見つけることができません。
何か制約事項があるのでしょうか。
'検索ウィンドウ名
wName="[GIP]エクセルシート"
'ウィンドウ発見フラグ
wdflag = False
For Each wd In Windows
If InStr(wd.Caption, wName) > 0 Then
wbn = wd.Caption
wdflag = True
Exit For
End If
Next
If wdflag = False Then
MsgBox "ウィンドウがみつかりません。", vbCritical + vbOKOnly, "Not found!!!"
Exit Sub
End If
No.1ベストアンサー
- 回答日時:
こんにちは。
この件の問題点は、不適切なブック名にあります。
決してバグではありませんし、VBAというよりは、Excelの仕様に関わります。
ファイル名はユーザーの好き勝手に付けられるものではなくて
OS:オペレーティングシステム
Excel:アプリケーション
それぞれに命名規則があるということはご理解頂けるものと思います。
この場合は、Excelのブック名には用いることの出来ない文字
"["と"]"が使われていることが問題になります。
Excelにとって角括弧は、数式上で別のブックを参照する際に、
[ブック名]のように表記し、「角括弧の内側にブック名を記してある」
というように、特別な意味を持つ記号です。
実際、XL2010で、新規のブックを[名前を付けて保存]する際に、
[GIP]エクセルシート.xls
という名前を指定しようとすると、警告ダイアログが表示されて
ファイルにアクセスできませんでした。次のいずれかを行ってみてください。
・ 指定したフォルダがあることを確認します。
・ ファイルを含むフォルダが読み取り専用になっていないことを確認します。
・ 指定したファイルの名前に次のいずれかの文字も含まれていないことを確認します : < > ? [ ] : | *
・ ファイル名およびパス名が半角で 218 文字より長くないことを確認します。
と表示されます。
つまり、角括弧を使ったブック名を指定して保存することを禁じています。
ブック名に角括弧を指定できるのは、エクスプローラから直接ファイル名を書き換えた場合になります。
[GIP]エクセルシート.xlsと名前を変更したなら、ブックを開くことも参照することも可能ですが、
他のブックから数式で参照する場合でも、
='[(GIP)エクセルシート.xls]Sheet1'!A1
のように、別のブックを参照していることを示す角括弧と明確に区別をする意味で、
ブック名にある角括弧[]を括弧()に置換して表示することになります。
そうしなければ、システムとして正常に機能しない、ということは、理解できると思います。
ウィンドウのキャプションは、
表示する文字列自体が何らかの制御に関連付けられている訳ではありませんから、
忠実に文字列としてのファイル名を表示しますが、
内部的には、制御(約物)記号である角括弧[]を括弧()に置換しています。
以上の理由から、ご提示の記述については、
アプリケーションの仕様に合わせる形で、
wName="(GIP)エクセルシート"
のように括弧()に置換した上で検索するしかありません。
尚、
[GIP]エクセルシート.xls
というブックと
(GIP)エクセルシート.xls
というブックとをExcel2010は判別しませんし、
同時に開くこともできません。
また、
[GIP]エクセルシート.xls
というブックをそのままの名前で上書き保存することは出来ますが、
他のフォルダ等に同じ名前で[名前を付けて保存]しようとしても、
候補として表示されるのは、
(GIP)エクセルシート.xls
になります。
私からの説明としては以上です。
納得いかない面もあるかと思いますが、何分にも仕様上のことですので
ありのまま理解につとめてくださいませ。⁓
丁寧な説明ありがとうございます。
該当ブックを保存したのが自分ではないために、エクセルから保存したのか、エクスプローラからファイル名だけを変更したのかわからない(恐らくは後者)のですが、エクセルの仕様であるということがはっきりしただけでOKです。
何らか判定、取得方法が間違ってるかと思ったので質問させて頂きました。
[]を()で読み替えるようにしたいと思います。
No.2
- 回答日時:
こんばんは。
>[GIP]エクセルシート・・・.xlsと
>表示されてるのですが、何故かcaptionの値だけ違っており、見つけることができません。
>何か制約事項があるのでしょうか。
基本的には、ファイル名の規則として、Excelでは、[] 角括弧は使えないはずです。それは、#1さんが書いているとおりですが、ただ、正直なところは、意図的にCaptionを変えているとか、そのあたりは、ご質問者側の事情だろうし、それを質問されても、こちら側では分かりません。
>Excel2010で以下のようにwindowsオブジェクトのcaption判定をしているのですが、
もうひとつは、マクロをみると、ファイル(ブック名)名を検索しないで、Window のCaption名を検索するのはなぜか、今ひとつ理解できません。ありえないコードはあるものの、一般的ではありません。ExcelのWindow は、一つのブックにいくつも存在するものですから、通常、Workbooks で、ループして、その中でNameを取るなどします。キャプションを取るのは、コントロール・オブジェクトがほとんどです。(ただし、私個人は、違う書き方をすることもあります。)
後は、お決まりなのですが、
>For Each wd In Windows
ではなく、WorkbookのWindowのCaption を探すのではないかと思います。
元のマクロとおなじようでいて、違います。
For Each wb In Workbooks で、wb.Windows(1).Captionを取るなり、Book名を取るなり、どちらかだと思います。(wd は、Word と見間違うので変えました)
>wName="[GIP]エクセルシート" 調べるのでしたら、最初に、ローカルウィンドウやマクロでキャプションやブック名で、名前の確認を取ってからでもよいのではないでしょうか?
別に、こちらの書いた内容を無視しても構いませんが、もし、その事情が正しいなら、別なマクロが最初に動いているかもしれません。
少なくとも、今のところ、「、”[]”が”()”に変わってました」という再現性が得られませんでした。
ご回答ありがとうございます。
>ファイル(ブック名)名を検索しないで、Window のCaption名を検索するのはなぜか、今ひとつ理解できません。ありえないコードはあるものの、一般的ではありません。
開いているファイルを検索するのにWindowsを使いましたが、これは一般的ではないのですね。
勉強不足ですね。ご指摘ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) VBA 同日で2回目(午後)の体温を登録するときのコード 3 2022/08/28 20:29
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】シートをそれぞれ...
-
エクセルVBAで、PDFファイルを...
-
複数ファイルから特定シートの...
-
エクセルの関数について教えて...
-
エクセルシートの一部を送りたい
-
エクセルの関数 ENTERを押...
-
エクセルで開いていないbookの...
-
北九州市にあった「井筒屋ブッ...
-
VBAでブックを非表示で開いて処...
-
エクセル2016です。「ブッ...
-
WorkBooksをオープンさせずにシ...
-
エクセルでウィンドウの枠固定...
-
vbaでpdfを開いて1ページ目のみ...
-
Excel VBA セルと同じ名前のブ...
-
エクセルで3つのブック(中は...
-
Excelファイルを開いても何も表...
-
複数のExcelファイルをまとめる...
-
複数の同じフォーマットのファ...
-
1フォルダ内、複数のExcelブッ...
-
エクセル(Excel)のファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelで複数ブックの同一セルに...
-
VBA バックグラウンドで別ブッ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
フォルダ内の複数ファイルから...
-
ブックのピボットを別ブックに...
-
エクセルシートの一部を送りたい
-
エクセル2016です。「ブッ...
-
エクセルで別ブックをバックグ...
-
フォルダ内の複数ファイルから...
-
複数ファイルから特定シートの...
おすすめ情報