Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
File scaricato e rilevato i seguenti errori :-)
Non avevi creato un modulo standard dove inserire la dichiarazione pubblica
Public WsDestinazione As Worksheet
Nelle due macro "click" delle CommandButton non avevi anteposto l'istruzione Set
Quando si assegna ad una variabile che rappresenta un oggetto (ad es. cartella di lavoro, foglio di lavoro, cella o intervallo di celle) occorre anteporre sempre l'istruzione Set.
Quindi:
Private Sub PinotBianco_Click()
Set WsDestinazione = ThisWorkbook.Worksheets("PinotBianco")
UserForm1.Show
End Sub
Private Sub PinotGrigio_Click()
Set WsDestinazione = ThisWorkbook.Worksheets("PinotGrigio")
UserForm1.Show
End Sub
Nella tua funzione "riga" avevi messo il punto prima di Range ma non avevi inserito il riferimento al foglio di lavoro impostato tramite WsDestinazione.
Quindi andava scritta così:
Function riga()
Dim i, n As Integer
With WsDestinazione
For i = 4 To 100000
If .Range("A" & i) = "" Then
n = i
Exit For
Else
End If
Next i
riga = n
End With
End Function
Qui trovi il tuo file modificato con le correzioni: File
Un consiglio è quello di scrivere il codice "a scalare". Personalmente lo trovo più leggibile rispetto ad un codice scritto "piatto". Ma sono scelte personali :)