E 'difficile dire che cosa sta succedendo, perché il codice si basa fortemente su membri predefiniti. Ad ogni modo:
Dim Th As Long
Questo è corretto.
Dim themeColorIndex As MsoThemeColorIndex
Questo è corretto e esplicito (vedi MsoThemeColorIndex su MSDN).
Come Scott Holtzman said, i valori possibili qui sono valori Enum
, non stringhe: non è possibile generare il valore corretto concatenando le stringhe in uno dei nomi definiti Enum
.
Così facendo questo:
Th = "msoThemeColorAccent" & ActiveCell.Offset(-5, 0)
La mia ipotesi è che ActiveCell.Offset(-5, 0)
deve contenere un numero compreso tra 1 e 6. Questo è un presupposto pericoloso fare: ActiveCell
potrebbe essere letteralmente nulla. Se tale valore è in una cella specifica, riferirsi ad esso dal suo indirizzo:
themeColorIndex = Sheet1.Range("B12").Value
Questo è leggermente meglio, ma assume ancora che il valore in B12
può essere implicitamente convertito in un numero intero Long
.
Dim selectedValue As Variant
selectedValue = Sheet1.Range("B12").Value
If Not IsNumeric(selectedValue) Then
MsgBox "Invalid value!"
Exit Sub
End If
If Sheet1.Range("E12").Value <> "Realized" Then Exit Sub
Dim themeColorIndex As MsoThemeColorIndex
themeColorIndex = selectedValue
Se siete interessati solo a msoThemeColorAccent1
attraverso msoThemeColorAccent6
, quindi ti consigliamo B12
per contenere i valori 5
attraverso 10
, che sono i valori enum sottostanti che stai cercando.
Se il tuo foglio di lavoro, per ragioni di usabilità, deve consentire valori 1
attraverso 6
, allora si può fare questo:
Dim themeColorIndex As MsoThemeColorIndex
'msoThemeColorAccent1 underlying value is 5, so we add 4 to the value:
themeColorIndex = selectedValue + 4
Allora stai facendo un'altra pericoloso presupposto: si assume che ci sia un grafico attivo !Supponendo che esiste il grafico in Sheet1
, si sarebbe molto meglio fare riferimento ad esso, ancora una volta, in modo esplicito:
Dim theChart As ChartObject
Set theChart = Sheet1.ChartObjects(1)
With theChart.SeriesCollection(srs) 'whatever srs means
With .Format
.Fill.ForeColor.ObjectThemeColor = themeColorIndex
.Fill.Solid
.Line.ForeColor.ObjectThemeColor = themeColorIndex
End With
End With
"Sto pensando il problema qui è ..." ti stai un errore con il tuo codice? O semplicemente non funziona come te lo aspetti? Se un errore, quale errore a quale linea? – BruceWayne
Scusa: in pratica la variabile Th non viene riconosciuta. Nessun messaggio di errore. Msothemecolor –
Rimuovi il 'come Long' e vedi cosa succede se è appena impostato su' Variant' (in alternativa, prova 'String'). Inoltre, assicurati che la cella offset sia compresa tra 1 e 6. – BruceWayne