Я ввожу дані в таблицю за допомогою коду VBA, я ввожу 3 записи в певні комірки [A2, B2, C2], і я запускаю код, щоб прийняти ці дані до першого порожнього рядка у таблиці.
код також запобігає дублікатам даних на основівведене значення в клітинці В2 якщо він вже існує в діапазоні (B2: B5000), це запобігає дублікатам. але проблема полягає в тому, що він не ігнорує чутливий випадок, наприклад: я ввів значення "оцтова кислота" через деякий час я хочу додати інший елемент іншим, хто набирає його так (оцтова кислота) або змінити будь-яку букву листа, код додати його нормально, не заважаючи. тому будь-які пропозиції, будь ласка, ігноруйте справу листа? використаний код:
Sub tarheel()
LastRow = Range("A10000").End(xlUp).Row + 1
LR = Range("b10000").End(xlUp).Row + 1
For r = 5 To LR
If Cells(r, 2) = Range("b2") Then MsgBox "This Item Name already exist, No shift will done": Exit Sub
Next
Cells(LastRow, 1).Value = Range("A2").Value
Cells(LastRow, 2).Value = Range("B2").Value
Cells(LastRow, 3).Value = Range("C2").Value
Range("A2:C2").Select
Selection.ClearContents
Range("A2").Select
End Sub
Відповіді:
1 для відповіді № 1Щоб змінити регістр у VBA, у вас є LCase
і UCase
, який відповідно змінить весь ваш рядок на нижче справа або верхній справа
Ось ваш код із зміною і отримав їзду про марність (і ресурс-жадний) вибрати в кінці:
Sub tarheel()
LastRow = Range("A10000").End(xlUp).Row + 1
LR = Range("b10000").End(xlUp).Row + 1
IsIn = False
For r = 5 To LR
If LCase(Cells(r, 2)) = LCase(Range("b2")) Then _
MsgBox "This Item Name already exist, No shift will done": Exit Sub
Next
Cells(LastRow, 1).Value = Range("A2").Value
Cells(LastRow, 2).Value = Range("B2").Value
Cells(LastRow, 3).Value = Range("C2").Value
Range("A2:C2").ClearContents
"Range("A2").Select
End Sub
2 для відповіді № 2
Спасибі за всі ваші відповіді, і я спробую це і дам вам відгук.
я міг це зрозуміти, додавши цю лінію у верхній частині мого модуля.
Option Compare Text
і це вирішило мою проблему.
Дякую
1 для відповіді № 3
Ви можете замінити цикл, який порівнює існуючі значення з нечутливим до регістру, змушуючи обидві значення вгорі або в нижньому регістрі.
For r = 5 To LR
If lcase(Cells(r, 2)) = lcase(Range("b2")) Then
MsgBox "This Item Name already exist, No shift will done"
Exit Sub
end if
Next
Можливо, більш ефективно використовувати функцію робочого листа без регістру, щоб перевірити весь діапазон відразу.
If cbool(application.countif(Range("B5:B" & LR), Cells(r, 2))) Then
MsgBox "This Item Name already exist, No shift will done"
Exit Sub
end if
Інший можливий варіант:
If not iserror(application.match(Cells(r, 2), Range("B5:B" & LR), 0)) Then
MsgBox "This Item Name already exist, No shift will done"
Exit Sub
end if