У меня есть пользовательская форма, в которой есть поле со списком имен, в котором пользователь может выбирать.Список должен быть динамическим, так как я хочу, чтобы пользователь мог вводить имя в поле со списком, если оно еще не существует, но для него также должен быть список уже существующих имен.Я нашел похожий вопрос, заданный несколько лет назад здесь: Excel - все уникальные слова в диапазоне
Проблема в том, что он работает только для одного листа, и я не могу понять, какизвлечь из нескольких листов, используя это, или как автоматически сортировать имена в алфавитном порядке.
Это подпрограмма, которую я использую для создания динамического диапазона в том виде, в каком он есть сейчас, ссылки на оригинального создателя оставлены, чтобы отдать должное кредиту.
Sub SupplierListDynamic()
'Source: https://powerspreadsheets.com/
'For further information: https://powerspreadsheets.com/vba-create-named-range/
'declare object variable to hold reference to worksheet containing cell range
Dim myWorksheet As Worksheet
'declare variables to hold row and column numbers that define named cell range (dynamic)
Dim myFirstRow As Long
Dim myLastRow As Long
Dim myFirstColumn As Long
Dim myNamedRangeDynamic As Range 'declare object variable to hold reference to cell range
Dim myRangeName As String 'declare variable to hold defined name
Set myWorksheet = ThisWorkbook.Worksheets("List_Data") 'identify worksheet containing cell range
myFirstRow = 2 'identify first row and first column of cell range
myFirstColumn = 9
myRangeName = "SupplierList" 'specify defined name
With myWorksheet.Cells
'find last row and last column of source data cell range
myLastRow = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'myLastColumn = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
'specify cell range
Set myNamedRangeDynamic = .Range(.Cells(myFirstRow, myFirstColumn), .Cells(myLastRow, myFirstColumn))
End With
'create named range with workbook scope. Defined name is as specified.
'Cell range is as identified, with the last row and column being dynamically determined
ThisWorkbook.Names.Add Name:=myRangeName, RefersTo:=myNamedRangeDynamic
End Sub
но он не сортируется, так как я использую {=INDEX(Sep[SUPPLIER],MATCH(0,COUNTIF($I$1:I1,Sep[SUPPLIER]),0))}
для извлечения уникальных значений из другого листа, когда я сортирую их, они просто возвращаются к своему первоначальному порядку из-за того, как работает формула.Я бы предпочел, чтобы все это было сделано с VBA, чтобы держать его на заднем плане, но мне нужна помощь, чтобы связать все вместе.