![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
VBScriptでのExcelブックのプロパティ参照について
先達のみなさまこんにちは。
VBScript(ExcelVBAではなく)を使って、Excelブック内のName
(Excelで、[挿入]-[名前]-[定義...]で表示される一覧)
を削除したいと思いコーディングしてみましたが、実行すると
ブックのBuiltInプロパティを参照しようとする箇所で
エラーとなってしまいます。
エラーメッセージは「オブジェクトでサポートされていない
プロパティまたはメソッドです。:'objName.BuiltIn'」と
表示しています。
次のようなコードです。
***
Option Explicit
Sub DelNames()
Dim objArgs
Dim objXls
Dim objBook
Dim objName
Dim I
Set objArgs = WScript.Arguments
Set objXls = CreateObject("Excel.Application")
Set objBook = objXls.ActiveWorkbook
For I = 0 to objArgs.Count - 1
' 引数内容確認
Wscript.Echo objArgs(I)
objXls.Workbooks.Open objArgs(I)
objXls.Visible = True
For Each objName in objXls.ActiveWorkbook.Names
If (objName.BuiltIn = True) Then
objName.Delete
End If
Next
Next
Set objXls = Nothing
Set objBook = Nothing
Set objName = Nothing
End Sub
***
これをlesson03.vbsとして保存し、これを呼び出すwsfファイルを作成しました。
***
<job id = "DelNamesDD">
<script language = "VBScript" src = ".\lesson03.vbs"></script>
<!-- Excel参照設定 -->
<reference guid="{00020813-0000-0000-C000-000000000046}"></reference>
<!-- メイン処理 -->
<script language = "VBScript">
Option Explicit
Call DelNames()
</script>
</job>
***
たとえばこれをDelName.wsfとして保存し、DelName.wsfにExcelファイル(*.xls)
をドラッグドロップして、「ビルトインではない」名前を削除させたい、と
考えたのです。
しかし、
If (objName.BuiltIn = True) Then
の部分で上記のエラーとなってしまい、解決方法がわかりませんでした。
解決方法を教えていただきたくよろしくお願いいたします。
利用しているExcelのバージョンは2003(SP3)、WSHのバージョンは5.6
です。OSはWindows XP SP3です。
お手数をおかけしますが、よろしくお願い申し上げます。
No.3ベストアンサー
- 回答日時:
BuiltInプロパティは Nameオブジェクトにはないと思います
VBAのオブジェクトブラウザで確認しました
お示しのURLマクロが動作するのは 『On Error Resume Next』による副産物のようです
この命令は エラーがあっても停止するのではなく 次の命令を実行しなさい ですので …
プロパティがあるかどうかは 正規のレファレンスを確認する癖をつけましょう
VB(A)の場合 隠してあるプロパティもあるので それらの確認は VB(A)の中の オブジェクトブラウザで確認しましょう
起動は デフォルトなら F2キーです
上方に2つあるコンボボックスの下側に探したいプロパティ名やメソッド名などを入れて検索します
隠しプロパティなどの表示は オブジェクトブラウザ内で右クリックして
『非表示のメンバーを表示』をクリック
淡色表示で隠しプロパティ等の確認も出来ます
WEBにある情報はすべてが正しいわけではありませんのでよく吟味しましょう
redfox63さん、レスポンスありがとうございます。
確かに、オブジェクトブラウザで自分で確認してみることが大切ですね。基本をないがしろにしてredfox63さんはじめみなさんにお手数をおかけし申し訳ございませんでした。
on error resume nextが生きていたとは・・・。VBAでステップ実行してみたところ、その様子もはっきりわかりました。
実はこれよりも以前に、Styleを削除しようとして、StyleにはBuiltInがあったので、Nameにもあると思い込んでしまっていたこともありました。
今後は確認を重ねてコーディングを進めるように気をつけます。
redfox63さん、みなさんありがとうございました。
No.2
- 回答日時:
> If (objName.BuiltIn = True) Then
何かの間違いでは?BuiltInというのは、CommandBar の中で、ユーザーが取り付けたものと、予め設定されているものとの違いに対して、そのプロパティを使うわけです。Name プロパティに区分けはありません。
>Set objXls = CreateObject("Excel.Application")
>Set objBook = objXls.ActiveWorkbook
ところで、これは間違っていませんか?objXls を生成しただけでは、ActiveWorkbook は存在しないはずです。
objXls.Workbooks.Open objArgs(I)
↓
Set objBook = objXls.Workbooks.Open(objArgs(I))
ということになるはずです。
ただ、そうはいっても、名前-登録のすべてが削除出来るか分かりません。
Names オブジェクトの親オブジェクトは、いくつか種類がありますから、必ずしも、Workbookになるとは限りません。
この回答への補足
レスポンスありがとうございます。
No.1さんへの補足にもありますように、参考にさせていただいたサイト様で
For Each s In ActiveWorkbook.Names
If Not s.BuiltIn Then
s.Delete
のように記述されていましたので(こちらはVBAですが)、これと同じことをVBScriptで実現したいと思ったものでした。
確かに、
>Set objBook = objXls.Workbooks.Open(objArgs(I))
>ということになるはずです。
ですね。ご指摘ありがとうございます。
この修正を行ってみましたが、実行結果はやはり同じエラーとなってしまいました。
お手数をおかけしすみません。ありがとうございました。
No.1
- 回答日時:
補足要求。
「BuiltInプロパティがある」と何を見て思ったのか聞いてみたいなあ。(使った参考資料とか)このへん見ても無さそうなんだけど。http://msdn.microsoft.com/en-us/library/microsof …この回答への補足
レスポンスありがとうございます。
あれ、ほんとですね。私が参考にしたのは次のサイトで見たVBAのサンプルです。
http://komitsudo.blog70.fc2.com/blog-entry-104.h …
この記事の中の「名前の一括削除マクロ」をExcel2003で試したところうまく削除できたので、ではVBScriptで書いてみよう、と思ったものでした。
すべての名前を削除してしまってもよいのですが、なんとなくビルトインのものまで削除するのは気が引けて、このような考慮ができるならやりたいと思っているものです。
よかったら、引き続きよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
エクセルのVBAの標準モジュール...
-
「Columns("A:C")」の列文字を...
-
VBAからPDFファイルにパスワー...
-
Excel VBAでWordの複数ファイル...
-
エクセルマクロエラー「'Cells'...
-
Excel VBAでIEにアクセスするプ...
-
VBAで既に開いている別アプリケ...
-
VBAについてです。 初心者です...
-
EXCEL VBA オートシェイプナン...
-
表示されるまで待たせたい
-
VB6 ファイルのリネームの仕方
-
テキストボックス中の文字列の...
-
VBA オブジェクトが空かどうか...
-
オブジェクト名が同じ図形の変更
-
実行時エラー 3265「要求された...
-
オブジェクトが見つかりません
-
エクセルVBAでFor each文
-
ADO 「NEW」の意味、必要性
-
パワーポイント filedialogでフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
EXCEL VBA オートシェイプナン...
-
VBAからPDFファイルにパスワー...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
PowerPointVBAでスライドマスタ...
-
[VBA]CDOメッセージ送信エラー
-
AccessVBAで「dim dbs as datab...
-
VBAで作成するメール(開封確認...
-
VBからPDFファイル自動生成...
-
上下の位置揃えについて
-
ExcelVBAでのNZ関数について
-
テキストボックス中の文字列の...
-
エクセルマクロエラー「'Cells'...
おすすめ情報