#excel #vba
#excel #vba
Вопрос:
Я пытаюсь проверить чилийский RUT (12345678-9), используя математический алгоритм, который работает отлично, но процедура применяется только тогда, когда RUT хранится в одной ячейке. Таким образом, когда пользователь вводит RUT, он отображает MsgBox
, сообщая пользователю результат.
RUT
----------
01234567-8 ' MSGBOX "THIS IS CORRECT/INCORRECT."
Теперь наша база данных хранит RUT в двух частях: сам RUT 01234567
и контрольную цифру — число после символа оценки — 8
.
Я думал о способе сохранения и проверки RUT при изменении столбца контрольных цифр, но я не могу понять, как сохранить оба значения одновременно, используя Target.Value
.
Наш «шаблон» Excel для базы данных
RUT DV
----------------
01234567 8 ' DISPLAY ALERT AS SOON AS DV IS ADDED?
Мой код проверяет одну ячейку:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("C")) Is Nothing Then
On Error Resume Next
rute = Target.Value
arut = UCase(Target.Value)
Rut = Replace("0000" amp; Rut, ".", "", 1)
If InStr(1, Rut, "-") > 0 Then Rut = Left(rute, InStr(1, rute, "-") - 1)
Rut = Right(rute, 8)
suma = 0
For i = 1 To 8
suma = suma Val(Mid(rute, i, 1)) * Val(Mid("32765432", i, 1))
Next i
dv = 11 - (suma Mod 11)
If dv = 10 Then dv = "K"
If dv = 11 Then dv = 0
'If Right(arut, 1) = CStr(dv) Then MsgBox ("Rut " amp; rute amp; " Correcto")
If Right(arut, 1) <> CStr(dv) Then MsgBox ("Rut: " amp; rute amp; " Incorrecto.")
If rute = "" Then MsgBox ("Campo(s) modificado(s).")
End If
End Sub
Любые подсказки о том, что мне следует делать, или другой подход приветствуются.
ПРИМЕЧАНИЕ: Формула в ячейке невозможна из-за требований.
Комментарии:
1. Вам не нужно использовать только
Target.Value
— вы можете получить доступ к обеим частям RUT с помощью (например)Target.EntireRow.Cells(1).Value
иTarget.EntireRow.Cells(2).Value
Ответ №1:
Вот пример (без вашего проверочного кода)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, rute, chk, c As Range
Set rng = Intersect(Target, Me.Range("C:D"))
If Not rng Is Nothing Then
For Each c in rng.cells
rute = c.entirerow.cells(3).value
chk = c.entirerow.cells(4).value
'validate rute and chk here and
' show msgbox if needed
Next c
End If
End Sub