Controlla il trailing \ nella stringa restituita da msoFileDialogFolderPicker, Excel VBA


2

Sto usando msoFileDialogFolderPicker per restituire un percorso quando un utente desidera depositare un rapporto in una cartella specifica.

Un modulo personalizzato (ufSelRepType) viene visualizzato nella macro nei casi in cui la posizione di salvataggio predefinita ha già un file di output o quando l'utente non desidera salvare nella posizione predefinita. Il modulo personalizzato specifica alcune posizioni di salvataggio comuni dei rapporti e offre la possibilità di selezionare una posizione alternativa. Facendo clic sul pulsante cmdCustom effettua le seguenti operazioni:

Private Sub cmdCustom_Click()
    Application.FileDialog(msoFileDialogFolderPicker).Show
    Me.Tag = CurDir
    Me.Hide

End Sub

Il codice nella macro per gestire l'output del modulo è semplice:

 strSavePath = ufSelRepType.Tag

Selezionando una cartella, la stringa viene sempre restituita senza "\" finale. Tuttavia, se viene selezionata una radice dell'unità (utilizziamo unità mappate sul nostro file server e quindi, sebbene questo caso possa essere raro, non è uno scenario inconciliabile) la stringa restituita termina con un "\".

Come potrei fare per verificare la presenza del "\" finale e gestirlo?

AGGIORNAMENTO: per soluzione di seguito, questo è il nuovo codice per il controllo modulo cmdCustom:

Private Sub cmdCustom_Click()
    Dim strFolderPath As String

    'Getting save folder
    Application.FileDialog(msoFileDialogFolderPicker).Show
    strFolderPath = CurDir

    'Checking that path ends in \
    If Right(strFolderPath, 1) = "\" Then
        GoTo Complete
    Else:
        strFolderPath = strFolderPath & "\"
        GoTo Complete
    End If
Exit Sub

Complete:
    Me.Tag = strFolderPath
    Me.Hide
Exit Sub

End Sub

Risposte:


3

Supponendo che strSavePathsia solo una stringa, puoi verificare se "\"è il carattere più giusto:

If Right(strSavePath, 1) = "\" Then
  doSomething()
Else
  doSomethingElse()
End If

Brillante. Grazie per questo. La sintassi di Right è Right (stringa, <numero intero di caratteri da controllare>)?
music2myear,

1
@ music2myear - sì, la sintassi è Right(string, length)dove length: Richiesto; Variante (lunga). Espressione numerica che indica quanti caratteri restituire. Se 0, viene restituita una stringa di lunghezza zero (""). Se maggiore o uguale al numero di caratteri nella stringa, viene restituita l'intera stringa.
Siim K

Ok grazie. L'ho implementato sul modulo stesso perché il modulo viene utilizzato in un paio di punti nella macro e farlo impedendo la duplicazione del codice. Funziona come un fascino.
music2myear,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.