私はVisualBasicの人間ではありませんが、古いVB6アプリの保守を任されています。ファイルをチェックアウトするたびに、エディターは大文字の変数名の束を自動的に小文字に置き換えます。どうすればこれを止めることができますか!?それらをすべて元に戻す必要はありません。実際の違いを見つけようとしているときに、これらの変更がSourceSafeの「違い」に表示されるのは面倒です。
定義でも自動的に変更されます:Dim C as Control
はDim c as Control
になります。 Dim X&
はDim x&
になります。しかし、それは常にそれを行うわけではありません。たとえば、Dim x&
から3行下に、大文字のDim Y&
がありますが、これは変更されていません。なぜ私にこれをするのですか?
DJの答え ..から続く.
また、同じスコープ内の変数の大文字と小文字を変更するだけではありません。
これにより、プロジェクト全体で同じ名前のすべての変数の大文字と小文字が変更されます。したがって、ある場所で大文字で宣言されている場合でも、別のモジュールでは、同じ変数名を小文字で使用して異なる変数が使用されている可能性があり、ロードされた宣言(?)または最後に編集しました。
したがって、C変数とX変数が大文字と小文字を変更し、Yが変更されない理由は、おそらくCとXがプロジェクト内の別の場所で宣言されているためですが、小文字で宣言されていますが、Yはそうではありません。
それについての別の言及があります ここ 、ここでは、ローカル変数とグローバル変数を区別するために大文字と小文字が使用されているときに、そのような変数名が競合することに主に関係しているようです。代わりにプレフィックスを使用することになります。
私が考えることができる唯一の選択肢は、VB6ハイライト機能を備えた他のエディターを使用して編集を行うことです...
私はいつもこのスレッドが最初に solution を探して混乱しているのを見つけたので、ここに Simon D が提案されています 関連する質問 :
1つの変数のケーシングを修正する必要がある場合(たとえば、誤ってcOrrectCAse
変数を作成し、それらがいたるところにある場合)、これを完全に修正できます。追加する
#If False Then
Dim CorrectCase
#End If
モジュールの最初に。プロジェクトを保存し、後でステートメントを削除しても、大文字と小文字は正しいままです。
Excel VBAを使用して、関数内のrow
変数を不注意に調光することにより、誤ってすべてのRange.Row
をRange.row
に変更することがよくあります。SimonDのソリューションを使用して、これを修正できます。
列挙型はさらに悪いです。列挙型が使用されている場所で大文字と小文字を間違えると、定義の大文字と小文字が変わります。
面倒なファイル差分の経験を乗り越えるには、差分ダイアログでVSSオプションを設定して、大文字と小文字を区別しない比較を行います。そうすれば、「実際の」変更のみが表示されます。
列挙値のVB6自動修正を防止します
私の原則として、定数は大文字で宣言します。列挙型は本質的に定数なので、大文字で列挙型の値を宣言するのも好きです。 VB6 IDEもこれらを自動修正することに気づきました。
値の名前に数字とアンダースコア「_」を使用すると、IDEはこれらの値を修正しないことがわかりました。
例:
Public Enum myEnum
VALUE 'Will be corrected to: Value
VALUE1 'Will not be corrected
VALUE_ 'Will not be corrected
End Enum
これが一般的に機能するかどうか、そしてこれが変数名の命名/自動修正にまで及ぶかどうかはわかりません。
すべてのVBプロジェクトを閉じ、テキストエディターでフォームファイルを開き、すべての名前の大文字と小文字を変更してから、VB IDEでプロジェクトを再度開きます。
小文字で定義/宣言する必要があります。宣言を見つけて、そこで修正します。 IDEは、宣言に一致するように常に大文字と小文字を変更します。
明らかな理由もなくUPPERCASEがMixedCaseに変更された、同様の列挙の問題がありました。
Enum eRowDepths
BD = 1
CF = 1
Separator = 1
Header = 3
subTotal = 2
End Enum
以下(不適合変数の最後の文字を追尾)に変更したところ、問題ありませんでした
Enum eRowDepths
BD = 1
CF = 1
SEPARATO = 1
HEADE = 3
SUBTOTA = 2
End Enum
これは尻尾が犬を振っている場合であることがわかりました。私は次のコードを持っています、私が認める最もエレガントではありませんが、それでも動作しています(フォーマットの問題を許してください):-
'insert 3 rows
iSubTotalPlaceHolder = i
rows(ActiveSheet.Range(rangeDMirrorSubTotals).Cells.Count + _
Header _
& ":" _
& ActiveSheet.Range(rangeDMirrorSubTotals).Cells.Count + _
Header + _
subTotal + _
Separator).Insert
したがって、コンパイラはこのステートメントの一部として明示的な大文字の定数を受け入れないようです。
これは許容範囲でした
Dim fred as Integer
fred = SEPARATO + HEADE + SUBTOTA
したがって、私の回避策は、列挙された定数を大文字に保つという規則に固執したい場合、複雑な挿入ステートメントの一部として定数の代わりに変数を使用することです。
これがお役に立てば幸いです