Excelで作成されたテーブル(WaterTableという名前)があり、データを入力できるユーザーフォームがあります。列は、YEAR、QUARTER、SOURCE、VOLUME です。
ここや他の場所を見回して、ユーザーがフォームのボックスにデータを入力して送信できるようにするコードでソートすることができました.コードは新しい行を追加してデータを入力します.
ただし、私が苦労しているのは、現時点でユーザーが入力できることです。
YEAR - QUARTER - SOURCE - VOLUME
2013 - 4 - MAINS - 50
それは問題ありません。ただし、間違った番号を入力して再入力したい場合は、新しい行が作成されますが、元のエントリは保持されます。これにより、データ (複数のエントリ) を表示する際に問題が発生し、エラーを修正できないことも意味します。私は周りを見回して、次のコードを入れることができました:
Set sheet = ThisWorkbook.Worksheets("Raw Data")
Set table = sheet.ListObjects.Item("WaterTable")
Set EvalRange = table.DataBodyRange
If WorksheetFunction.CountIf(EvalRange, YearBox.Text) > 1 And WorksheetFunction.CountIf(EvalRange, QuarterBox.Text) > 1 And WorksheetFunction.CountIf(EvalRange, SourceBox.Text) > 1 Then
MsgBox "Data Entry Already Present"
Application.EnableEvents = False
Else
Call AddDataRow
End If
これは私の問題を部分的に解決します。現在、特定の年、四半期、およびソースに対して 1 つの「ボリューム」データ ポイントしか入力できないためです。これはある程度機能しますが、私が本当に欲しいのは、メッセージボックスに現在のデータを置き換えるか閉じるかのオプションを与えることです。誤って入力されたデータを修正できるようにします。残念ながら、私はその上にレンガの壁に出くわしてしまい、何を使うべきか考えられません!
それが理にかなっていることを願っています!
以下のコメントに続く追加として:
「find」コマンドを使用するように変更し、次のコードを作成して開始します。
SearchString = YearBox.Value
On Error Resume Next
Set bCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Offset(0, 3)
If Not bCell Is Nothing Then
MsgBox "Checking data Validity"
ReplaceData = bCell.Address
End If
Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
FoundAt = aCell.Address
Select Case MsgBox("The entered exists: " & FoundAt & " " & ReplaceData & " Replace?", vbYesNo)
Case vbNo
MsgBox "data entry cancelled"
Case vbYes
Select Case MsgBox("This will replace data: Are You Sure?", vbYesNo)
Case vbYes
bCell = VolBox.Value
Case vbNo
Call CommandButton1_Click
End Select
End Select
Else
MsgBox "Unique Data Entry Confirmed - submit data?", vbOKCancel
Call AddDataRow
End If
残念ながら、それほどエレガントではありません(エントリが見つからない場合、bCellの最初の「検索」が失敗する理由がわかりません-事実上同じように見えるaCellは正常に動作しますか??したがって、エラーで再開します)。
ただし、これは 1 つのデータ ポイント (この場合は年) のみをチェックするため、年の列が一致するかどうかを確認し、ユーザーが希望する場合はボリューム データを変更し、希望しない場合は停止します。私ができないことは、複数の基準を使用することです。これで「AND」を使用する方法がわかりませんか?