Ошибка времени выполнения «1004» Ошибка приложения или объекта: строковая переменная в качестве формулы проверки данных - PullRequest
0 голосов
/ 16 марта 2019

Итак, я новичок в VBA и пытаюсь получить в раскрывающемся списке элементы, отображаемые в строке переменной, разделенной запятыми, которую я использую.Я хочу, чтобы каждое значение в данном столбце отображалось как опция в раскрывающемся списке.Я уверен, что это далеко не самый эффективный способ сделать это, но я просматривал каждое значение в столбце, добавляя его в строку, пока не достигну первого пустого значения.Я подтвердил, что переменная FilterListString заполняется значениями, которые мне нужны, в правильном формате, но когда я передаю ее в качестве формулы для проверки, она выдает ошибку.Как мне это исправить?

Спасибо!

   If FilterColumn.Value <> "" Then
    Do While Not IsEmpty(FilterColumn) 'Loop through values in the Filter column until blank
        FilterListString = FilterListString & "," & FilterColumn.Value ' Supplement the Formula String
        Set FilterColumn = FilterColumn.Offset(1, 0) 'Move down Row
    Loop
Else
    FilterListString = " " 'If inital cell is null set to blank
End If

With Sheets("Report Generation").Range("E" & ColumnNumber + 7).Validation 'Create Drop down List on the cell for filtering
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=FilterListString
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

1 Ответ

0 голосов
/ 16 марта 2019

Я попробовал ваш код (с небольшими обновлениями, чтобы он работал на моем ПК), и он работает как надо.Я думаю, что ошибка во многом связана с конкретными значениями в ваших таблицах - либо значениями FilterColumn, либо целевой проверенной ячейкой.

Если вы выполните следующий код в новой книге, она должнапредоставить желаемый результат.

Option Explicit

Sub a()

    Dim FilterColumn As Range
    Dim FilterListString As String
    Dim ColumnNumber As Integer

    Set FilterColumn = Sheets(1).Range("A1")
    FilterListString = "asd"
    ColumnNumber = 1

    '''   testing values
    Sheets(1).Range("A1").Value = "qqq"
    Sheets(1).Range("A2").Value = 123
    Sheets(1).Range("A1").Value = "www"

    If FilterColumn.Value <> "" Then
        Do While Not IsEmpty(FilterColumn) 'Loop through values in the Filter column until blank
            FilterListString = FilterListString & "," & FilterColumn.Value ' Supplement the Formula String
            Set FilterColumn = FilterColumn.Offset(1, 0) 'Move down Row
        Loop
    Else
        FilterListString = " " 'If inital cell is null set to blank
    End If

    If ThisWorkbook.Worksheets.Count < 2 Then
        Worksheets.Add
    End If

    With Sheets(2).Range("E" & ColumnNumber + 7).Validation 'Create Drop down List on the cell for filtering
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=FilterListString
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

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