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!

È stato utile?

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}"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top