Sì, così funziona, ovviamente perdo la funzionalità di prima, in cui il grafico rimaneva visibile.
Ma capisco che non posso avere la botte piena e la moglie ubriaca, se possibile cercherò di avere i dati sullo stesso foglio e usare la combinazione di macro precedente, altrimenti uso questa.
Ovviamente si perde qualcosa
Si potrebbe ovviare creando due finestre in cui visualizzare due fogli diversi del file, ma la gestione delle finestre da vba non e' così intuitiva.
Una possibile alternativa che mi piace di piu' e' lavorare con una userform che replica i dati sorgente e ne consente la modifica.
Ad esempio:
Questo codice va in un Modulo standard del vba inizialmente vuoto:
- Codice: Seleziona tutto
Public lbSource As String
Sub ShowDataPoint()
Dim SerPoint As String, SnP, ChForm As String, SplForm
Dim sFrom As Long, LBAdr As String, grAdr As String
'
SerPoint = ExecuteExcel4Macro("selection()")
SerPoint = Replace(Replace(SerPoint, "S", "#", , , vbTextCompare), "P", "#", , , vbTextCompare)
SnP = Split(SerPoint, "#")
If UBound(SnP) = 2 Then
ChForm = Replace(ActiveChart.SeriesCollection(CLng(SnP(1))).Formula, "''", "")
SplForm = Split(ChForm, ",")
sFrom = CLng(SnP(2)) - 3
If sFrom < 1 Then sFrom = 1
grAdr = Range(Split(SplForm(UBound(SplForm) - 1), "!")(1)).Address
LBAdr = Range(Split(SplForm(UBound(SplForm) - 1), "!")(1)).Cells(sFrom, 1).Resize(7, 1).Address
UserForm1.ListBox1.RowSource = Replace(SplForm(UBound(SplForm) - 1), grAdr, LBAdr)
lbSource = Replace(SplForm(UBound(SplForm) - 1), grAdr, LBAdr)
UserForm1.Show vbModeless
UserForm1.ListBox1.ListIndex = 3
UserForm1.TextBox1.Text = ""
UserForm1.ListBox1.Enabled = False
UserForm1.TextBox1.SetFocus
Else
Debug.Print "Err_A", SerPoint
Beep
End If
End Sub
Scarica poi questi due file:
https://www.dropbox.com/s/hb5r8kl8hhg0p ... 1.frm?dl=0https://www.dropbox.com/s/3fwml5b6bira8 ... 1.frx?dl=0Sono i file descrittivi di una userform; dal vba fai Menu /File /Importa file; seleziona il file WnG_UserForm1.frm scaricato e completa con Apri.
A questo punto puoi:
-selezionare un punto del tuo grafico
-avviare la Sub ShowDataPoint
Dovrebbe aprirsi la userform; in un ListBox vengono elencati i valori nell'intorno del punto selezionato (3 prima e 3 dopo). Hai un textbox in cui puoi inserire un nuovo valore; il pulsante Update dovrebbe inserire questo "nuovo" valore al posto di quello precedente, il ListBox e il grafico si aggiornano.
I valori nel listbox non sono selezionabili.
Per una nuova modifica vai sul grafico e seleziona un nuovo punto da modificare, ma poi devi cliccare sulla userform per aggiornare il contenuto del ListBox, come viene ricordato da una label (quando non sei sicuro della corrispondenza Userform - punto selezionato clicca sulla userform e non fa male)
Quando hai finito devi chiudere la form con la "X"; se ti accorgi che ci sono altri punti da correggere, torna all'inizio: selezionare un punto del tuo grafico /avviare la Sub ShowDataPoint
Non e' tanto lineare, e in effetti se hai pochi punti da modificare forse e' meglio rimanere con la procedura attuale (Sub GotoDataPoint), che rimane funzionante anche dopo l'aggiunta della nuova procedura con userform
Ciao