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 № 1Uau, 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.