2

「通常の」方法(リンクされたテーブル)ではデータシートを検証できないため、プログラムでデータシートを検証しています。悪意を入力したことをユーザーに伝える「通常の」方法は、MsgBox ポップアップでユーザーを罰することです。フォームのラベルにメッセージを表示し (これは機能します)、問題のあるセルの背景色を変更したいと考えています。セルの色は条件付き書式でしか変更できないので (これはうまくいきます)、先頭にスペースがあるセルを強調表示するルールをいくつか設定しました。

パズルの最後のピースは、問題のあるセルの値を先頭のスペースで変更して、条件付き書式で強調表示されるようにすることです。しかし、その部分は機能していません。セルの値を変更しても何も起こりません。新しい値で自分自身を更新するようにデータシートに指示する必要があるかのように感じます。

これが私がこれまでに持っているものです:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim isValid As Boolean
    isValid = myDataSheetRow_IsValid()
    ' if the page is valid, don't cancel the update
    Cancel = Not isValid
End Sub

Private Function myDataSheetRow_IsValid() As Boolean
    ' validate our data as it cannot be validated in the GUI due to the way linked tables work
    myDataSheetRow_IsValid = True
    Dim myErrMsg As String
    myErrMsg = ""

    'evaluate my column called ABC
    If (IsNull(Me.ABC)) Then
        myErrMsg = myErrMsg + "ABC cannot be blank" + vbNewLine

        '---------------------
        'PROBLEM START
        '---------------------
        'Set the cell value to what it was plus a leading space
        'Because I have set up conditional formatting on the datasheet
        'So that leading spaces highlights the cell for attention

        Me.ABC= " " + Me.ABC 'trigger conditional formatting ??
        '---------------------
        'PROBLEM END
        '---------------------
    End If
    ' ... more validating ...
    ' done validating
    Call Me.Parent.UpdateErrorMsgArea(myErrMsg)
    If (Len(myErrMsg) > 1) Then
        myDataSheetRow_IsValid= False
    End If
End Function

データシート セルの値をプログラムで設定するにはどうすればよいですか?

私はこの方法で試してみましたが、うまくいきません - データシートで何も変更されていません。プログラムで変更された新しい値を表示するためにデータシートが更新されていないようです。

4

1 に答える 1

1

Me.ABCが Nullの場合、コードは次のステートメントを実行します...

Me.ABC= " " + Me.ABC

私の印象では、そのステートメントは にスペースを格納することを期待していますMe.ABCが、実際には Null を格納しています。

その理由は、何かに Null を追加すると Null になるからです。何かが数値であるかテキスト文字列であるかは問題ではありません。Nullを追加しても Null が得られます。

ただし、(演算子を使用して) Null をテキスト文字列と連結&すると、テキスト文字列が返されます。

Me.ABC= " " & Me.ABC

しかし、Me.ABCその時点で が Null であることはわかっているため、連結による利点は実際にはありません。スペース文字だけを割り当てます...

Me.ABC = " "
于 2015-06-10T19:31:27.933 に答える