[[20041026125128]] 『コンパイルエラー:変数が定義されていません』(トット) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンパイルエラー:変数が定義されていません』(トット)

[コンパイルエラー:変数が定義されていません・・・?]

以前質問させていただいた回答に沿ってやってみたのですが、
下のVBAをコピーして貼り付けすると「xlnon]のところが青くなって
「コンパイルエラー変数が定義されていません」が
出てきます。
どうゆうふうに解除したらよいのでしょうか?
A列に数値を入れたときに数値によってフォント色が変わります。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    Dim colr As Integer

    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    Select Case Target
        Case Is <= 10
            colr = 3 'ここの色番号をお好きなように
        Case Is <= 20
            colr = 4  '々
        Case Is <= 30
            colr = 5 '々
        Case Is <= 40
            colr = 6 '々
        Case Is <= 50
            colr = 7  '々
        Case Is <= 60
            colr = 8  '々
        Case Is <= 70
            colr = 9 '々
        Case Is <= 80
            colr = 22 '々
        Case Is <= 90
            colr = 43  '々
        Case Is <= 100
            colr = 29  '々
        Case Else
            Target.Offset(0, 0).Font.ColorIndex = xlnon
            Exit Sub
    End Select

    Target.Offset(0, 0).Font.ColorIndex = colr

 End Sub


 Target.Offset(0, 0).Font.ColorIndex = xlnon
 Target.Offset(0, 0).Font.ColorIndex = colr
 上記ふたつのOffsetは必要ないので抜いてみてください。
 Target.Font.ColorIndex = xlnon
 Target.Font.ColorIndex = colr
 (川野鮎太郎)


 エラーメッセージに従って、変数を宣言すればよいのでは?

   (INA)


 衝突しました・・。

 ※それからどこに貼り付けましたか?
 標準モジュールではなく、該当シートのシートモジュールに貼り付けてください。
 (川野鮎太郎)


 Option Explicit
が記述してあり、
 Target.Font.ColorIndex = xlnon
だと、該当エラー表示になります。
近い組み込み定数は xlNone ではないかと思いますが、
フォントに xlNone (色無し)は設定できないので、これもエラー。
自動なら xlAutomatic
白なら 2
黒なら 1
(みやほりん)
 
【余談】
[[20040918124028]] 『色分け』(ヨッシー) 
元スレはInteriorオブジェクトのColorIndexだから、
xlnon  未定義の変数、代入無し = Empty
結果は 0 を代入した時と同じになります。
だから、問題なく動いていたのだと推測。
元スレでは、xlNone を指定すべきところでしたね、
(みやほりん)


 変数の定義で
Dim colr As xlnon でも
値が0になるので結果としては自動になるようですね。
 (川野鮎太郎)


 えーっと、
Dim colr As xlnon
では、「変数colrをxlnonというユーザー定義型変数として宣言する」
ということになるのでTypeステートメントで作成しないと
・・・コンパイルエラー・・・
もし変数xlnonとして使うなら、
 
Dim xlnon As Integer  '(またはLong型)
 
もしくは定数として
 
Const xlnon As Integer = 0
 
を追加ではないかと・・・・。
(みやほりん)


 あちゃ・・・
 おっしゃるとおりです。
 まったく何を書いたんだか・・・。すいませんでした。
 (川野鮎太郎)

 いえいえ、恐縮なさらずに。
でも要は、
「Option Explicitの記述があるのならそれを削除、またはコメント化」
がいちばん簡単ではないかと。
ただ、最初にこれを書いちゃうと xlnon を組込定数として
覚える人が出てきちゃって、あとあと問題ありかな〜と思いまして。
 
かってにまとめます。
【1】参考にしたスレッドの誤記
 
 Target.Interior.ColorIndex = xlnon
 
xlnon は xlNone が正しい。
そのため xlnon をVBAでは「未定義の変数」と扱う。
xlnon には値代入がなされていないので、実行中はEmptyのまま。
実行上問題がなかったのは初期値Emptyが 0 として扱われたため。
 Target.Interior.ColorIndex = 0 とした場合と同じ。
xlNone と 数値 0 は等しくありませんが、
ColorIndexプロパティが両方とも「塗りつぶし無し」の設定として許容。
 
【2】Option Explicit
エラーメッセージから相談者の(トット)さんのモジュールには
Option Explicitが記述されていると推測されます。
今回の問題はOption Explicitをモジュールから削除する
ことで解決すると思われます。
が、「未定義の変数」xlnonがそのままなので、
 
 Target.Font.ColorIndex = 0      または
 
 Target.Font.ColorIndex = xlAutomatic
と書き換えるべきでしょう。
 
【3】Interior と Font のColorIndex定数の違い
セル背景色「塗りつぶし無し」
Target.Interior.ColorIndex = xlNone 'または xlColorIndexNone 
 
フォント色「自動」
Target.Font.ColorIndex = xlAutomatic 'または xlColorIndexAutomatic 
 
同じ規定値に戻す動作でも組込定数が違う。
(みやほりん)

 あれまぁ、このマクロの原型はあの「ヤ」の付く男が作ったヤツでっしゃろ?
 せやから鮎さんには責任おまへんわなぁ。アレが世に出てしばらく後Hatchさんが
 「xlnonをxlNoneに訂正して使え」っちゅうてどっかのスレで注意を促しとりました
 けど、鮎さんこれは見落としとりましたナ。(笑)
 パクリマクロの陥るワナ、なんちゃって。(笑)
   わたしゃ関係ない(弥太郎)


 そうなんですか、そのようなレスがあったとは露知らず(;^_^A アセアセ
 パクリは自己責任でですから、私の責任です\_( ・_・)ハイここテストに出ますよ♪
 お手数かけましたm(._.)m ペコッ
 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.