2016-02-28 26 views
5

È necessario aggiungere un elenco di convalida dei dati a Cell i cui pochi valori contengono una virgola. Ho lo stesso problema Data Validation to Include Comma CharacterVBA Excel: come aggiungere un elenco di convalida dei dati che contiene il valore incluso nella virgola senza utilizzare il riferimento dell'intervallo

Ma non posso fare riferimento a un intervallo, perché sto creando una nuova cartella di lavoro e alimento la sua cella con l'elenco di convalida dei dati. Quindi riferimento non sta lavorando per me e dato che alcuni valori contengono virgola quindi non posso impostare il Gamma in String e l'uso che, dopo Formula1

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=myStr 

Un'altra idea che ho trovato che posso sostituire virgola con un altro carattere (carattere fittizio) e dopo aver popolato la cella sostituire quel carattere fittizio con una virgola ma il problema è che come sostituire quel carattere fittizio con una virgola?

Un altro modo è quello di ignorare la Formula1 in modo da poter utilizzare il carattere fittizio come delimitatore ma non so come ottenere ciò.

Per qualsiasi proposta di soluzione, il mio obiettivo finale è quello di creare una nuova cartella di lavoro e popolarlo con la lista di convalida dei dati attraverso Excel VBA

+0

Non puoi semplicemente creare un nuovo foglio di lavoro e rilasciare la tua lista lì, quindi fare riferimento? – Roland

+0

Posso, ma il problema è una virgola contenente valori. Se immagazzino l'intero articolo in ** myStr **, la convalida dell'elenco li divide automaticamente in nuovi elementi. Di cui non ho bisogno – civam

+0

Vedere [qui] (http://stackoverflow.com/questions/30724178/create-data-validation-list-when-some-of-the-values-have-commas), in particolare la risposta di Siddharth usando 'chr (130) '- che sembra una virgola, ma non è una. – vacip

risposta

3

Utilizziamo il carattere fittizio per la cella B9. Questo imposta il DV:

Sub InternalString2() 
    Range("B9").Select 
    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:=Replace("alpha%ralpha,beta%waiter,gamma%hammer,delta%faucet","%",Chr(130)) 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = False 
    End With 
End Sub 

dove Chr (130) è il manichino. Il .ShowError è importante.

Ora per sostituire il manichino , usiamo il evento macro:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Range("B9")) Is Nothing Then Exit Sub 

    Application.EnableEvents = False 
     Range("B9").Replace What:=Chr(130), Replacement:="," 
    Application.EnableEvents = True 
End Sub 
+0

Grazie per la risposta, ma non funziona. Cambia solo il carattere fittizio dell'elemento selezionato dell'elenco, non gli interi elementi. – civam

+2

Ho suggerito una modifica a questo in cui Chr (130) viene utilizzato come carattere fittizio. Questo soddisferà tutti i requisiti di @civam di apparire come una virgola sull'elenco e di esportare effettivamente come una virgola dopo la selezione. – snoopen

+0

@snoopen Grazie per il miglioramento! –

0

Come gli altri stati di risposta, la virgola non può essere sfuggito. L'unica soluzione, per quanto posso vedere, è aggiungere un foglio di lavoro aggiuntivo alla tua nuova cartella di lavoro, aggiungere i valori lì per il tuo elenco, nominare quell'intervallo, nascondere quel foglio e fare riferimento all'intervallo denominato. È giusto pochi passi ma in realtà è l'unico modo.

+0

Grazie per il tuo suggerimento, ma questa non è la mia esigenza. – civam

+0

Apprezzo che non è il tuo requisito, tuttavia questo sarebbe l'unico modo per avere una virgola vera nella tua lista. Ti consiglio Chr (130) come suggerito da @vacip se non vuoi creare il foglio di lavoro separato. – snoopen

+0

Ho creato una cartella di lavoro fittizia e ogni volta che si esegue il codice lo salva con il nuovo nome del file. – civam

0

quanto @snoopen suggeriscono, ho creare una cartella di lavoro Dummy che contiene l'elenco di convalida dei dati e ogni volta il codice lo esegue salvando come Dummy Workbook al nuovo nome di file desiderato. Dopodiché popola quel foglio con i dati richiesti.