Несколько вариантов.
Вы можете поместить раскрывающийся список проверки данных в ячейку, а не в раскрывающийся список.Это возвращает фактические результаты, а не индекс.Если вам все еще нужна отдельная связанная ячейка, вы можете поместить формулу, которая просто копирует ячейку dv
Sub MakeDv()
Dim wSheet As Worksheet
Dim myRng As Range
Set wSheet = ActiveSheet
Set myRng = wSheet.Cells(row, col)
myRng.Validation.Add xlValidateList, , , "msg1,msg2"
wSheet.Cells(row, col + 2).Formula = "=" & myRng.Address
End Sub
Другой вариант - не использовать свойство LinkedCell и использовать макрос для записи значения.Присвойте этому макросу выпадающий список
Sub ShowDDResult()
Dim dd As DropDown
Set dd = ActiveSheet.DropDowns(Application.Caller)
ActiveSheet.Cells(row, col + 2).Value = dd.List(dd.Value)
End Sub
. Это может быть не так просто, если вы создаете лист с нуля из Access, поскольку вам нужно добавить макрос.Последний вариант - использовать свойство ListFillRange для заполнения раскрывающегося списка.Поместите список в диапазон и используйте формулу из LinkedCell, чтобы вытащить дату из списка
Sub testdd()
Dim wSheet As Worksheet
Dim myRng As Range
Dim myDD As DropDown
Dim rList As Range
Dim aList(1 To 2, 1 To 1) As String
Set wSheet = ActiveSheet
Set rList = wSheet.Range("D1:D2")
Set myRng = wSheet.Cells(row, col)
aList(1, 1) = "msg1": aList(2, 1) = "msg2"
rList.Value = aList
With myRng
Set myDD = .Parent.DropDowns.Add(Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
myDD.ListFillRange = rList.Address
myDD.LinkedCell = wSheet.Cells(row, col + 2).Address
wSheet.Cells(row, col + 3).Formula = "=INDEX(" & rList.Address & "," & myDD.LinkedCell & ",1)"
End With
End Sub