0

これは非常に簡単な修正かもしれませんので、私の「初心者」をむき出しにしてください。ユーザーが PIN# を入力すると、VBA コードがその ID を取得し、ローカル DB を使用してその ID に基づいて特定のセルを変更する、非常にユニークなフォームがあります。セルには、DB からのデータが入力されるか、それに応じて異なる形式でフォーマットされるか、またはその両方が行われます。すべてその PIN 番号に基づいています。

DB でピンを検索し、N または Y のいずれかの値を見つけて、それに応じてセルをフォーマットするコードがあります。問題は、DB の値が「N」の場合にセルの値を変更し、色を変更し、セルをロックするようにコードを記述していることです。ユーザーが関連付けられた DB で「Y」値を持つ PIN# を入力すると、セルは同じままになります...次に、DB で相関する「N」値を持つ PIN# でユーザーが入力すると、値は変化する。すべて良いですよね?? いいえ!問題は、ユーザーが戻って、関連付けられた DB 内の相関 "Y" 値を持つ別の PIN# を入力すると、セルが元の状態に戻らず、灰色のままロックされたままになることです。連続したオカレンスまたは何かについてのステートメントが必要です... 何か不足していますか?

Sub setChromBox()

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "Y" Then
    Exit Sub
 End If

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "N" Then
    Range("START_GCTR").value = "NO"
    Range("START_GCTR").Interior.ColorIndex = TRColor.Color_Null
    Range("START_GCTR").Locked = True
 Else
    Range("START_MC_LOOKUP").ClearContents

注: GetLDBValue は単にローカル DB に ping を実行する関数であり、GetHasChrom は DB 内のテーブルに ping を実行して "Y" または "N" の値を返すクエリです。If it changes back の行に沿って何かを言う別の IF ステートメントを追加する必要がありますか? 私はここから離れていますか?コードを他の場所で変更する必要がありますか? どんな助けでも大歓迎です

4

1 に答える 1

1

はい、私はあなたが正しいと思いますが、コードをほとんど変更する必要はありません。これを試してください:

Sub setChromBox()

 If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "Y" Then
    Range("START_GCTR").Locked = False
    Range("START_GCTR").value = 'desired text here
    Range("START_GCTR").Interior.ColorIndex = 'Desired Colour here

 Else If GetLDBValue(GetHasChrom(Range("START_PIN").value)) = "N" Then
    Range("START_GCTR").value = "NO"
    Range("START_GCTR").Interior.ColorIndex = TRColor.Color_Null
    Range("START_GCTR").Locked = True
 End If

End Sub

目的のテキストと色が以前のものである場合、これは少しトリッキーです。「N」ケースが実行される前に、これらの値をどこかに保存する必要があります。これらは、ワークシートのセル、またはマクロの実行間で保持される public static 変数に保存できます。

于 2014-07-24T00:11:11.140 に答える