MS Excel 2003 - semplice domanda deselezionare in Excel VBA quando si tratta di forme
-
13-09-2019 - |
Domanda
Così ho una cartella di lavoro di Excel che ha uno schema di mappatura globale in esso. Così ho una forma per ogni paese in Excel. A seconda della regione di selezione, relativa ai dati / query, sarà regioni ombra / paesi in vari modi.
Quindi so come manipolare ogni forma in termini di colori, sfumature di gradiente, ecc ....
Quello che non so come fare è "deselezionare" la forma alla fine del sub routine. Il mio codice simile a questo (vero e proprio semplice)
sheet1.shapes ( "countryName"). Selezionate selection.shaperange.fill.solid selection.shaperange.fill.visible = true Selection.ShapeRange.Fill.ForeColor.RGB = rgb (110.110.110) selection.shaperange.fill.onecolorgradiend msogradienthorizontal, 2, 0,45
ok così da una forma / paese / regione all'altra il "deselezionare" non è così grande di un affare perché attenzione salta, ma alla fine ????
Ho indovinato / provato un sacco di roba, ma purtroppo senza fortuna
grazie!
Soluzione
si dispone di un errore di battitura nella vostra fonte ultima riga, ... gradiend -> ... gradiente
selection.shaperange.fill.onecolorgradienT msogradienthorizontal, 2, 0.45
un modo molto semplice di "de-selezionando" l'oggetto forma sarebbe di aggiungere questa riga di codice
sheet1.[A1].select
questo sposta il focus alla cella A1 nel foglio e, quindi, via fro l'oggetto. Molto scortese, e io non lo consiglio. Anche io non consiglio a "salvare la selezione corrente", come proposto in precedenza come non sappiamo se il cursore si trova in una cella o in un altro (intervallo) dell'oggetto.
Il modo bettwer è quello di evitare "selezione" del tutto per tutto lo script. Asign la forma di un oggetto e manipolare l'oggetto (nota: ho simulato in Sheet3 con il primo oggetto disponibile nel mio test)., Cioè
Sub test()
Dim MyShape As Shape
Set MyShape = Sheet3.Shapes(1) ' or whatever shape according to the user input
With MyShape.Fill
.Solid
.Visible = True
.ForeColor.RGB = RGB(110, 110, 110)
.OneColorGradient msoGradientHorizontal, 2, 0.45
End With
End Sub
Ancora meglio, se si sta elaborando un elenco che si dà il nome di una forma, effettuare le seguenti operazioni
Sub Test()
'
' get the shape's name into ShapeName
' ...
ColorShape Sheet3.Shapes(ShapeName)
' ...
End Sub
Sub ColorShape(MyShape As Shape)
With MyShape.Fill
.Solid
.Visible = True
.ForeColor.RGB = RGB(110, 110, 110)
.OneColorGradient msoGradientHorizontal, 2, 0.45
End With
End Sub
Spero che questo aiuti Buona fortuna MikeD
Altri suggerimenti
Si può non semplicemente registrare la cellula originaria che è stato scelto?
Dim oCell as Range
set oCell = activecell
'' Do stuff here
oCell.activate
Aggiornamento: Questa porzione di codice registra la selezione corrente, poi ri-seleziona esso dopo aver selezionato gamma ( "A4"). Senza sapere che cosa i tipi di forme che avete nella vostra cartella di lavoro, non posso verificare che questo funzionerà, ma ha finora con quello che ho provato.
Set mySel = Application.Selection
[A4].Select
mySel.Select
Mi sono imbattuto in un problema simile in cui avevo bisogno di nascondere una forma dopo che è stato cliccato. La mia soluzione era quella di utilizzare SendKeys
per sfuggire alla selezione
SendKeys "{Esc}"