Список проверки ошибок, определяемых приложением или объектом

#excel #vba

Вопрос:

Поэтому я попытался скопировать свой «TotalRange», и после того, как он был вставлен, я попытался добавить новый список проверки данных в одну из ячеек. Он продолжает получать ошибку в строке 10.

 Sub Order_AddTotals()
Dim LastRow As Long
With Sheet1
    LastRow = .Range("P8:Q999").Find(What:="*", After:=.Range("P8"), Lookat:=xlPart, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row  'First Avail Row
    .Range("P" amp; LastRow   2 amp; ":W" amp; LastRow   5).Value = .Range("TotalRange").Value
    .Range("Q" amp; LastRow   2).Formula = "=Sum(T8:T" amp; LastRow amp; ")" 'Sub Total
    .Range("Q" amp; LastRow   3).Formula = "=Q" amp; LastRow   2 amp; "*TaxRate"
    .Range("T" amp; LastRow   3).Formula = "=Q" amp; LastRow   2 amp; " Q" amp; LastRow   3 amp; "-T" amp; LastRow   2 'Total
    .Range("T" amp; LastRow   4).Formula = "=Q" amp; LastRow   4 amp; "-T" amp; LastRow   3
    .Range("Q" amp; LastRow   5).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=Payment_Method" 'This part is the problem
End With
End Sub
 

Спасибо вам за вашу помощь.

Ответ №1:

(По крайней мере) две вещи могут привести к тому, что:

а) Формула недействительна. Есть ли у вас именованный диапазон Payment_Method в вашем листе? Можете ли вы установить это вручную в своем листе?

б) Ячейка уже прошла проверку. Даже если это точно то же самое, вам нужно сначала удалить его. При настройке проверки с помощью кода всегда выдавайте Delete первый (это нормально, даже если в ячейке в данный момент нет проверки).

 With .Range("Q" amp; LastRow   5).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=Payment_Method" 
End With

    
 

Комментарии:

1. Спасибо. Очевидно, я не удалил его первым.