Раскрывающийся список проверки в таблице Excel через VBA

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь сохранить некоторые данные, введенные на одном листе, в таблицу продаж, которая у меня есть на другом листе.

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

Когда я ввожу данные на своем основном листе и запускаю этот код с того же основного листа или любого другого листа в моей рабочей книге, данные сохраняются в моей таблице продаж, но раскрывающийся список не вставляется в столбец «P».

Если я запускаю этот код с рабочего листа, на котором есть таблица продаж, все работает так, как задумано.

Вот мой код:

     Public Function updateSalesInfo(wbk As Workbook, strFileName As String)

    Dim lngRow          As Long
    Dim wks             As Worksheet
    Dim tableListObject As ListObject
    Dim tableObjectRow  As ListRow
    
    Set wks = wbk.Sheets("Sales")
    Set tableListObject = wks.ListObjects("Sales")
    Set tableObjectRow = tableListObject.ListRows.Add
          
    With wks
    
        lngRow = .Range("B65536").End(xlUp).Row
        
        With .Range("B" amp; lngRow)
            .Value = Range("_newInvoice").Value
            .Offset(, 1).Value = Format(Now(), "mmmm d, yyyy")
            .Offset(, 2).Value = Range("rngCustID").Value
            .Offset(, 3).Value = Range("rngCustName").Value
            .Offset(, 9).Value = Range("_invoiceDueDate").Value
            .Offset(, 11).Value = "=IF(ISBLANK(B" amp; lngRow amp; "),"""",L" amp; lngRow amp; "-J" amp; lngRow amp; ")"
            .Offset(, 12).Value = "=IF(AND(K" amp; lngRow amp; "<=TODAY(),M" amp; lngRow amp; "<0),""Yes by ""amp;(TODAY()-K" amp; lngRow amp; ")amp;"" Days"","""")"
            .Offset(, 13).Value = Range("rngLoginUserName").Value
            .Offset(, 14).Value = "Draft"
        End With
        .Hyperlinks.Add Anchor:=.Range("B" amp; lngRow), Address:=strFileName, ScreenTip:="Click to open a file"
     
        With wks.Range("P" amp; lngRow).Validation
             .Delete
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=Settings!" amp; Range("rngInvoiceStatus").Address
             .IgnoreBlank = True
             .InCellDropdown = True
             .InputTitle = ""
             .ErrorTitle = ""
             .InputMessage = ""
             .ErrorMessage = ""
             .ShowInput = True
             .ShowError = True
    
   
        End With
    End With
   
    Set wks = Nothing
    
End Function
 

Любые предложения о том, как сделать это правильно?

Заранее благодарю вас

Ответ №1:

Я обнаружил проблему, которая вызывала проблему, с которой я столкнулся с этим кодом.

При проверке Formula1 следует указывать только диапазон, а не адрес, на который ссылается диапазон.

Поэтому вместо того, чтобы иметь это: Formula1:="=Settings!" amp; Range("rngInvoiceStatus").Address

Теперь у меня есть это: Formula1:="=rngInvoiceStatus" и все работает так, как задумано.