#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"
и все работает так, как задумано.