Проверка пользовательских данных: ошибка времени выполнения 450 - PullRequest
0 голосов
/ 16 апреля 2020

Итак, я пытался добавить проверку данных в одном из моих макросов, который перемещает строку данных на следующую вкладку.

Я искал здесь и в других местах синтаксис et c. и думаю, что я должен иметь право заявки. Основная проблема заключается в том, что всякий раз, когда я запускаю макрос, я получаю «Неверное количество аргументов или неверное присвоение свойства»

Соответствующая часть макроса выглядит следующим образом:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)

Dim RngP As Range, RngQ As Range

With ThisWorkbook.SHEETS(4) 'The code only fires if they confirm - if not, the line will remain in Pipeline.
            Dim RowToPasteTo As Long
            RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
            .Range("P" & RowToPasteTo).FormulaR1C1 = "=IFERROR(IF(RC[8]="""",RC[-3]-RC[-1]-RC[9],""""),"""")" 'Creates the budget Overhead Formula
            .Range("Q" & RowToPasteTo).FormulaR1C1 = "=IFERROR(RC[-2]/RC[-4],"""")" 'Creates the percentage of budget used formual


            Set RngP = .Range("P" & RowToPasteTo).Range 'Setting variable to new budget overhead cell
            Set RngQ = .Range("Q" & RowToPasteTo).Range 'Setting Variable to new  Budget Used cell
            RngP.Validation.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Formula1:="=""" 'Making data validation lock in the formula
            RngQ.Validation.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Formula1:="=""" 'Making data validation lock in the formula

  End With
End Sub

Кажется, ошибка применяется на строки Set RngP = .Range("P" & RowToPasteTo) и следующие три строки.

То, к чему я стремлюсь, это установить проверку данных для новых ячеек P & Q с формулами на пользовательскую проверку = "", чтобы другие люди не меняли формулу.

Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Это Formula1:="=""" не является действительной проверкой forumla. Формула должна в соответствии с документацией Validation.Add метод привести к True или False.

Так что замените его на Formula1:=rngP.Address(False, False) & "=""". Вам как-то нужен адрес в формуле, с которым сравнивается "".

0 голосов
/ 16 апреля 2020

поздравляет @HTH с первой частью ответа.

Последняя проблема, которая у меня возникла с ошибкой времени выполнения 1004, заключалась в том, что я не поставил достаточно кавычек.

Так что у меня было: RngP.Validation.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Formula1:="="""

Я должен был иметь имел RngP.Validation.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Formula1:=""=""""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...