1

dateofbirth というタイトルの日付ピッカー コンテンツ コントロールと、datefirstseen というタイトルの別の日付ピッカー コンテンツ コントロールがあります。ageasatlastbirthday というタイトルのフォームの同じ最初のページのテキスト ボックス コンテンツ コントロールに計算される年の差を特定しようとしました

私はこのコードを試しました

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim CCtrl As ContentControl, DtStart As Long, DtEnd As Long
With ContentControl
  If .Title = "DateofBirth" Then
    If IsDate(.Range.Text) Then
      DtStart = CDate(.Range.Text)
      With ActiveDocument.SelectContentControlsByTitle("DateRecruitedDateFirstSeen ")(1)
        If IsDate(.Range.Text) Then DtEnd = CDate(.Range.Text)
        ActiveDocument.SelectContentControlsByTitle("Ageatlastbirthday ")(1).Range.Text = Int((DtEnd - DtStart) / 365)
      End With
    End If
  End If
  If .Title = "DateRecruitedDateFirstSeen" Then
    If IsDate(.Range.Text) Then
      DtEnd = CDate(.Range.Text)
      With ActiveDocument.SelectContentControlsByTitle("DateofBirth")(1)
        If IsDate(.Range.Text) Then DtStart = CDate(.Range.Text)
        ActiveDocument.SelectContentControlsByTitle("Ageatlastbirthday ")(1).Range.Text = Int((DtEnd - DtStart) / 365)
      End With
    End If
  End If
End With
End Sub

このコードを ContentControlOnExit 形式のドキュメントとして 'thisdocument' セクションに挿入しましたが、それでも機能しません。

実行可能なコードに変更してください。

4

1 に答える 1

0

まず、「Dim CCtrl As ContentControl」は必要ありません。Sub に渡された両方の ContentControls は、日付の Content Controls であることが望ましいです。.Range.Text が日付でない場合、ルーチンは何もしません。.Range.Text が日付でない場合は、悲惨な警告を発行することをお勧めします。はい、次のような診断メッセージを入力して、何が問題なのかを確認することをお勧めします

Debug.Print .Range.Text
于 2017-10-13T03:42:25.983 に答える