
VBSで名前定義に関するときの処理について質問です。
特定の名前定義(仮にaaa)の有無で別エクセルファイルに出力するプログラムなのですが
ない時のifの条件(★部分)が分からなくて困っています・・・
これかなと思ったのを書いてエラーが起きたのですが、このエラーは理解出来たので大丈夫です。
尚以下のソースは途中のものでエクセルのオブジェクト参照などは既にしており、そのあたりは記述しておりませんがご了承ください。
よろしくお願いします
'特定の名前定義があるか確認
Option Explicit
Dim n
For Each n In ex.ActiveWorkbook.Names
WScript.Echo n.Name '名前定義一覧確認
If (n.Name = "aaa") Then '名前定義が"aaa"ならば
WScript.Echo (.Name) & ": 名前定義aaaあり" 'デバッグ用
'処理をしたファイル名と名前定義の有無を「処理出力.xlsx」に出力する(Excelファイル)
'セルに名前定義"tm1ServerName"があるか確認
Set exBk = ex.Workbooks.Open (file) '「処理結果.xlsx」を開く
'セルの指定&入力
exBk.ActiveSheet.Range("A1").Value = "ファイル名"
exBk.ActiveSheet.Range("B1").Value = "名前定義の有無"
exBk.ActiveSheet.Cells(i,1).Value = (.Name)'ファイル名書き出し
exBk.ActiveSheet.Cells(i,2).Value = "ある" '結果表示
i = i + 1
exBk.Save '保存
exBk.Close '閉じる
End If
Next
'処理をしたファイル名と名前定義の有無を「処理結果.xlsx」に出力する(Excelファイル)
'セルに名前定義"aaa"がないか確認
If Not (★ = "aaa") Then 'aaaが一つもなければ
WScript.Echo (.Name) & ":aaaなし" 'デバッグ用
Set exBk = ex.Workbooks.Open (file) '「処理結果.xlsx」を開く
exBk.ActiveSheet.Range("A1").Value = "ファイル名" '見出し
exBk.ActiveSheet.Range("B1").Value = "名前定義の有無" '見出し
exBk.ActiveSheet.Cells(i,1).Value = (.Name)'ファイル名書き出し
exBk.ActiveSheet.Cells(i,2).Value = "ない" '結果表示
i = i + 1
exBk.Save '保存
exBk.Close '閉じる
End If
ex.Quit 'Excel終了
No.1ベストアンサー
- 回答日時:
VBSは苦手ですけど。
Option Explicit
Dim n,ch '★変更
ch = True '★追加
For Each n In ex.ActiveWorkbook.Names
WScript.Echo n.Name '名前定義一覧確認
If (n.Name = "aaa") Then '名前定義が"aaa"ならば
ch = False '★追加
WScript.Echo (.Name) & ": 名前定義aaaあり" 'デバッグ用
'処理をしたファイル名と名前定義の有無を「処理出力.xlsx」に出力する(Excelファイル)
'セルに名前定義"tm1ServerName"があるか確認
Set exBk = ex.Workbooks.Open (file) '「処理結果.xlsx」を開く
'セルの指定&入力
exBk.ActiveSheet.Range("A1").Value = "ファイル名"
exBk.ActiveSheet.Range("B1").Value = "名前定義の有無"
exBk.ActiveSheet.Cells(i,1).Value = (.Name)'ファイル名書き出し
exBk.ActiveSheet.Cells(i,2).Value = "ある" '結果表示
i = i + 1
exBk.Save '保存
exBk.Close '閉じる
End If
Next
>If Not (★ = "aaa") Then 'aaaが一つもなければ
If ch Then '★変更
' 以下略
---------
ブール型 (Boolean) にあたる変数を用いてみるとか?
No.4
- 回答日時:
と言う事は、
i = 2 '★多分2行目から書き出すようになっていると予測(既に記載済み?)
'★まずは書き込むブックを開いておく
'処理をしたファイル名と名前定義の有無を「処理出力.xlsx」に出力する(Excelファイル)
'セルに名前定義"tm1ServerName"があるか確認
Set exBk = ex.Workbooks.Open (file) '「処理結果.xlsx」を開く
Set exWS = '★ActiveSheetではなくWorksheets(~)と明確にする
'セルの指定&入力
exWS.Range("A1").Value = "ファイル名"
exWS.Range("B1").Value = "名前定義の有無"
For Each n In ex.ActiveWorkbook.Names '★自BookならThisWorkbook それ以外ならBook名を明確に指定
WScript.Echo n.Name '名前定義一覧確認
If (n.Name = "aaa") Then '名前定義が"aaa"ならば
WScript.Echo (.Name) & ": 名前定義aaaあり" 'デバッグ用
exWS.Cells(i,1).Value = (.Name)'ファイル名書き出し '★ .Name とは With文を使われている?
exWS.Cells(i,2).Value = "ある" '結果表示
i = i + 1
End If
Next
exWS.Cells(i,1).Value = (.Name)'ファイル名書き出し '★ .Name とは With文を使われている?
exWS.Cells(i,2).Value = "ない" '結果表示
i = i + 1
'★多分この辺に ex.ActiveWorkbook のループの終わりがある?
exBk.Save '保存
exBk.Close '閉じる
ex.Quit 'Excel終了
No.3
- 回答日時:
No.2です。
>Set exWS = '★ActiveSheetではなくWorksheets(~)と明確にする
Set exWS = '★ActiveSheetではなくexBK.Worksheets(~)と明確にする
でしたね。
>めぐみんさん
多数の回答にありがとうございます!
i=2は既に記載しておりました。省略せずにエクセルオブジェクト参照以外のことも記述しておくべきだしたね・・・怠わって申し訳ないですorz
(.Name)についてですが、そちらは参考にさせて頂いたURLがあるのですがそこにて、そのような書き方をしていたのでそちらを真似させていただきました!
For文の中にElseの方を書いたパターンは既に試してはみたのですが、その場合だと名前定義がない時がFor文の中に入りませんでした。
それで自分は、ない時はFor文の条件式に当てはまらないから、その中に入らないのかと自思っているのですが、どうでしょうか・・・?
(For文直後に『Wscript.Echo ()』を書いて名前定義がないファイルが読み込まれてないのを確認済み)
Falseを追加して比較したりex.WorkSheet()と明確にしたりと思いつかなかったのでとても参考になりました・・・!
確かに同じブック内で処理するのに閉じて開くを繰り返すのは変ですね・・・その辺りも含めて今後もっと精進していこうと思います。
自分の説明下手で分かりづらい所が度々あって申し訳ございませんでした・・・
お忙しい中、本当にありがとうございました!
No.2
- 回答日時:
No.1です。
補足については、No.1の回答に関わります?
と言うよりループ内でブックを開いて閉じるを繰り返すのも変ですよね?
で、こんな感じに変えてみました。
Option Explicit
Dim n,i
i = 2 '★多分2行目から書き出すようになっていると予測(既に記載済み?)
'★まずは書き込むブックを開いておく
'処理をしたファイル名と名前定義の有無を「処理出力.xlsx」に出力する(Excelファイル)
'セルに名前定義"tm1ServerName"があるか確認
Set exBk = ex.Workbooks.Open (file) '「処理結果.xlsx」を開く
Set exWS = '★ActiveSheetではなくWorksheets(~)と明確にする
'セルの指定&入力
exWS.Range("A1").Value = "ファイル名"
exWS.Range("B1").Value = "名前定義の有無"
For Each n In ex.ActiveWorkbook.Names '★自BookならThisWorkbook それ以外ならBook名を明確に指定
WScript.Echo n.Name '名前定義一覧確認
If (n.Name = "aaa") Then '名前定義が"aaa"ならば
WScript.Echo (.Name) & ": 名前定義aaaあり" 'デバッグ用
exWS.Cells(i,1).Value = (.Name)'ファイル名書き出し '★ .Name とは With文を使われている?
exWS.Cells(i,2).Value = "ある" '結果表示
i = i + 1
Else '★該当しない時
exWS.Cells(i,1).Value = (.Name)'ファイル名書き出し '★ .Name とは With文を使われている?
exWS.Cells(i,2).Value = "ない" '結果表示
i = i + 1
End If
Next
exBk.Save '保存
exBk.Close '閉じる
ex.Quit 'Excel終了
--------------
でも、(.Name) で何が書き込めるのか?が私にはわかりませんでしたが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/03/28 14:52
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SetTimer関数について
-
アクティブなウィンドウのみ、...
-
functionのパラメータの渡し方...
-
エラー(型が一致しません。)...
-
プレロードイメージについて
-
char[]とchar*
-
VB6でユーザー定義型がNothing...
-
配列の要素番号を取得するには?
-
getURLとJavaScriptの連携について
-
ActionScriptで配列をクリアす...
-
FLASHでランダムでURLを表示さ...
-
変な質問ですみません、n番目の...
-
関数の中でaddEventListenerを...
-
C言語のsizeof(サイズオブ)演算...
-
DXRubyについてです
-
【ActionScript】配列の昇順降...
-
重複しない乱数整数を発生させる。
-
yes no で、50質問してyesの数...
-
サムネイルの写真にリンクをつ...
-
経過日数のカウントアップ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
TextChangeイベントが発生しない
-
LRESULTとHRESULT
-
ifdefとenum
-
#define 文
-
PHP + MySQL で登録時に重複チ...
-
jQueryの関数内の変数について...
-
クラス内に自作のイベントを定...
-
時間差を取得結果を求めるには
-
Javascriptのreturnについての...
-
fetchでreturnで戻り値
-
プレロードイメージについて
-
prototypeでajaxをする時に、on...
-
【JavaScript】イベント伝播の...
-
VBS 名前定義の確認→ありかなし...
-
JavaScriptの即時関数をアロー...
-
callbackってなんですか。
-
イベントリスナーの重複登録に...
-
関数定義について質問です 架空...
おすすめ情報
申し訳ございません。
7行目のコメントの'処理をしたファイル名と名前定義の有無を「処理出力.xlsx」に出力する(Excelファイル)のついてですが
正しくは'処理をしたファイル名と名前定義の有無を「処理結果.xlsx」に出力する(Excelファイル)
です。紛らわしいことをして申し訳ございませんでした。