/ / Permitir entrada nula ao recuperar dados da lista múltipla de seleção múltipla - excel, vba, listbox, multi-select

Permitir entrada nula ao recuperar dados da lista múltipla de seleção múltipla - excel, vba, listbox, multi-select

Eu estou tentando criar um simples baseado em planilhaformulário que vai puxar dados das seleções para outra folha na pasta de trabalho do Excel. Esta é minha primeira vez mexendo com controles Visual Basic e ActiveX e eu não tenho muita experiência de programação, mas com um monte de Googling eu tenho conseguido atrapalhar alguns até agora.

A parte em questão: Eu tenho algumas caixas de seleção múltipla que, com o clique de um botão, enviam os dados para a planilha, usando este código:

Private Sub CommandButton1_Click()
Dim I As Long
Range("A10").Select
Range(Selection, Selection.End(xlToRight)).ClearContents
With Me.ListBox1
For I = 0 To .ListCount - 1
If .Selected(I) Then
Flg= True
txt = txt & "," & .List(I)
End If
Next
End With
If Flg Then
With Sheets("Sheet1")
.Range("A10").Value = Mid$(txt, 2)
End With
End If
txt=""
"Repeat for each listbox"
End Sub

Contanto que o usuário tenha selecionado pelo menos umitem em cada caixa de listagem, isso funciona bem para puxar os dados, e de lá eu posso fazer o que eu preciso. Mas eu não quero exigir que o usuário clique em cada caixa (isto é, eu suponho que eu poderia forçá-los a clicar em uma seleção nula se eles não querem selecionar algo nessa caixa, mas seria mais fácil apenas eles não selecionam absolutamente nada). Mas (compreensivelmente) quando nada é selecionado em uma determinada caixa, o código que colei acima retorna erro de tempo de execução 1004: Nenhum dado foi selecionado para analisar.

Como posso permitir que o usuário não faça nenhuma seleção em uma caixa e o código apenas deixe a célula associada em branco quando os dados forem recuperados?

Respostas:

0 para resposta № 1

Uau, depois de alguns dias olhando, finalmente encontrei. Este é o código que funcionou para mim:

Private Sub ListBox1_LostFocus()
Dim listItems As String, i As Long

With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then listItems = listItems & .List(i) & ", "
Next i
End With

If Len(listItems) > 0 Then
Range("A2") = Left(listItems, Len(listItems) - 2)
Else
Range("A2") = ""
End If

End Sub

E veio desta página: https://www.mrexcel.com/forum/excel-questions/584437-write-selections-excel-listbox-cell.html ... graças a "Marcelo Branco" por fornecer essa resposta há 7 anos!

EDIT - Isso realmente responde a uma pergunta separadaque eu tive (sobre recuperar os dados automaticamente), mas parece que também funciona para a grande questão aqui, pois quando nada é selecionado, a célula de destino fica em branco.