Список проверки данных в Excel VBA - PullRequest
0 голосов
/ 24 февраля 2020

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

ошибка несоответствия типов

ThisWorkbook.Sheets("Plan").Cells(i, 5).Validation.Add _
      Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
      Formula1:=Join(St, ",")

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

Sub try() 
Dim j,k As Long 
Dim c As Range 
Dim st As Object 
Set st=CreateObject("System.Collections.ArrayList") 
For j=5 To 150 
If(Workbook.Sheets("Plan").Cells(i,1)= Workbook.Sheets("Master").Cells(j,1))Then 
    For k= 6 To 150 
        If(Workbook.Sheets("Master").Cells(j,k)<>"") Then
            For Each c In Workbook.Sheets("Master").Cells(1,k)
                Select Case c.Value 
                    Case"Starch" st.Add Workbook.Sheets("Master").Cells(3,k)
                EndSelect 
            Nextc 
        EndIf 
    Next k 
EndIf 
Next j 

Workbook.Sheets("Plan").Cells(i,5).Validation.Add Type:=xlValidateList, _
              AlertStyle:=xlValidAlertStop, Formula1:=Join(st,",") 

End Sub

1 Ответ

0 голосов
/ 24 февраля 2020

Вам нужно перевести ваш ArrayList в обычный массив, прежде чем вы сможете передать его в Join.

Например:

Sub Tester()

    Dim st As Object

    Set st = CreateObject("System.Collections.ArrayList")
    st.Add "A"
    st.Add "B"
    st.Add "C"

    'Debug.Print Join(st, ",")         'fails with "Type Mismatch"
    Debug.Print Join(st.toarray, ",") 'Works >> A,B,C

    ActiveSheet.Cells(1, 1).Validation.Add Type:=xlValidateList, _
        AlertStyle:=xlValidAlertStop, Formula1:=Join(st.toarray, ",")

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