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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
「Columns("A:C")」の列文字を...
-
エクセルマクロエラー「'Cells'...
-
Excelでフィルタをかけると警告...
-
VBAで Set wb = Sheets(1).Cop...
-
VBAで既に開いている別アプリケ...
-
ある文字列が全て数字であるか...
-
テキストボックス中の文字列の...
-
オブジェクトが見つかりません
-
ASP レコードセットしたオブジ...
-
[VBA]CDOメッセージ送信エラー
-
Cモジュールが落ちる現象について
-
上下の位置揃えについて
-
EXCEL VBA オートシェイプナン...
-
Visual Basic.NETのエラー("オ...
-
DelphiのTListについて
-
エクセルVBA 他ブックのシート...
-
VBScriptでファイルの日時順(降...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
テキストボックス中の文字列の...
-
PowerPointVBAでスライドマスタ...
-
エクセルマクロエラー「'Cells'...
-
VBAからPDFファイルにパスワー...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBAについてです。 初心者です...
-
VBA:オートシェイプの線の長...
-
VBで引数にDictionaryオブジェ...
-
AccessVBAで「dim dbs as datab...
おすすめ情報