Condividi:        

Macro che indica la riga prima della cella attiva

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Macro che indica la riga prima della cella attiva

Postdi systemcrack » 16/02/24 16:02

Ciao ragazzi,
vorrei far apparire un messaggio in cui viene indicato il nr di riga prima di quello della cella attivo.
Questo perchè ho una tabella (schema entrate) di cui si è parlato qui, in cui la numerazione è sfalsata di una riga.

Al momento ho reperito in rete questa Macro:
Codice: Seleziona tutto
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("H2:H201")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        MsgBox "ENTRATA NR" & ActiveCell.Row

End If


Immagine

Non riesco a trovare il modo di sottrarre 1 al risultato della macro.. :aaah :lol:
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Sponsor
 

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 16/02/24 17:48

Non so a che ti serve quel msgbox se non a disturbare l'operatore, comunque il numero di riga della cella attiva e' calcolato con ActiveCell.Row; quindi per "la riga precedente" devi calcolare ActiveCell.Row – 1

A proposito del codice:
Range(Target.Address) e' un giro superfluo, in quanto "Target" e' gia' un range, quindi il risultato di Range(Target.Address) e' pari a Target; come se insomma facessi Range(Range("A2:B8").Address): ti restituisce Range("A2:B8")
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 16/02/24 18:50

Anthony47 ha scritto:Non so a che ti serve quel msgbox se non a disturbare l'operatore,

Guarda pensavo la stessa cosa, ma gli stessi operatori mi hanno richiesto di aggiungere questa finestra, in quanto dopo diverso tempo che si aggiungono dati e si riporta il nr di riga sul buono di carico per determinarne l'ordine d'ingresso, capita di sbagliarsi (soprattutto se si lavora velocemente) e di riportare il nr sbagliato. Questo concerne spiacevoli alterchi con camionisti, di oltre il quintale estremamente alterati. Ovviamente devo ancora curarne l'estetica, per renderlo più immediato, ma credo sia la strada giusta per evitare questo genere di situazioni.
Anthony47 ha scritto:comunque il numero di riga della cella attiva e' calcolato con ActiveCell.Row; quindi per "la riga precedente" devi calcolare ActiveCell.Row – 1

Ti giuro che ci ho pensato/provato, ma mi restituiva errore.. :roll: probabilmente sbagliavo qualche cosa.. ci riguarderò
Anthony47 ha scritto:A proposito del codice:
Range(Target.Address) e' un giro superfluo, in quanto "Target" e' gia' un range, quindi il risultato di Range(Target.Address) e' pari a Target; come se insomma facessi Range(Range("A2:B8").Address): ti restituisce Range("A2:B8")

Darò un'occhiata anche a questo.. grazie della dritta. ;)

Aggiornamento 15 secondi dopo
Sono un pollo! Modificavo la riga sbagliata :aaah
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 16/02/24 21:11

Siccome la MsgBox non è customizzabile e rimane più un fastidio che un'utilità, perchè troppo piccola, ho pensato di creare una userform che faccio aprire al posto del primo.. e fin qui tutto a posto.
Ora non riesco a trovare un modo per mostrare il testo restituito dalla macro (cioè il numero di riga che interessa a noi) sulla userform.
Ho provato TextBox, ma ricevo errore..

Al momento sono arrivato qui ma ovviamente non va bene
Immagine
Codice: Seleziona tutto
Private Sub UserForm_Layout()
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("H2:H201")

' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        MsgBox "ENTRATA NR" & ActiveCell.Row -1

End Sub
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 17/02/24 09:31

Vedo che hai gia' creato una userform; supponiamo si chiami UserForm1.
Mettici dentro una "Label", che avra' il nome Label1 (a meno che tu non lo cambi)
Poi quando vuoi segnalare il messaggio non usare Msgbox etc etc ma
Codice: Seleziona tutto
Userform1.Label1="Il Messaggio da visualizzare"
UserForm1.Show

Se il formato del messaggio visualizzato non ti piace puoi modificare font, dimensione, allineamento, colore in fase di progettazione (o anche con istruzioni, es Userform1.Label1.Font.Size = 14 cambia la dimensione)
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 17/02/24 12:53

Ciao Anthony, purtroppo seguendo il tuo suggerimento ricevo errore.. questo perchè nel tuo comando c'è UserForm1.show che io invece ho aggiunto altrove. Premesso ciò lascia che ti illustri come mi sono mosso (che sicuramente non sarà corretto):

Ho creato una userform che ho chiamato. "Entrata" che è composta dal bottone per chiuderla e dal testo che non riesco a far apparire:
Codice: Seleziona tutto
Private Sub CommandButton1_Click()

Unload Me

End Sub

Private Sub UserForm_Layout()
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("H2:H201")

' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        Entrata.Label1 = " & ActiveCell.Row -1"

End Sub


Ho aggiunto un modulo8 che mostra la finestra
Codice: Seleziona tutto
Sub avvisoentrate()
Entrata.Show
End Sub


Mentre nel Foglio Entrate ho richiamato il tutto quando cambia un range di celle specifico
Codice: Seleziona tutto
Call avvisoentrate


Forse un pò troppo macchinoso? :roll:
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 17/02/24 16:26

Ma io ho detto "supponiamo si chiami UserForm1"
Se si chiama ENTRATE allora userai ENTRATE invece che UserForm1

Userai poi il codice che ti ho dato al posto del msgbox

Forse un pò troppo macchinoso? :roll:
Forse Sì :D
Eventualmente lascia anche il Commandbutton sulla userform col suo codice (così la form puo' essere chiusa con la X ma anche col pulsante) ma toglierei la Private Sub UserForm_Layout e tutta la Sub avvisoentrate
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 17/02/24 17:35

Di fatti ho utilizzato "Entrata" non UserForm, (ho adattato lo script al mio caso, o almeno pensavo di averlo fatto) l'errore che ricevo è perché c'è il mio show e il tuo show. Ho provato a togliere il mio, ma dopo non si apre più il pop-up. Sicuramente devo rivedere con calma il tutto.. faccio qualche altra prova e ti dico.
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 18/02/24 19:23

Forse sarò io che come dicono a Roma "sarò de coccio", ma non riesco proprio a venirne a capo la scritta col nr di riga con la userform non vuole proprio comparire. Per non saper ne leggere ne scrivere ho persino ricominciato da capo seguendo i tuoi precedenti consigli, ma niente.
Questa domenica è stata una Caporetto :aaah :lol:

Premesso questo sono giunto al seguente punto e perchè tu possa verificare con mano ti allego il file qui.

In Foglio1 (ENTRATE) In Worksheet change
Codice: Seleziona tutto
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("H2:H201")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.

Entrata.Show
End If


Ho creato un Form che ho chiamato Entrata
al suo interno ha questo codice
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub Conteggio_Click()

 Entrata.Conteggio = "& ActiveCell.Row -1"
 Conteggio.Show
 
End Sub


Conteggio è il label1 all'interno del Form Entrata.

Ho provato facendo altre ricerche tramite la funzione DoEvents, ho pensato che il problema fosse il non chiamare in causa il campo testo (Caption) nel comando, ma niente non riesco proprio a farlo apparire. :undecided:
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 19/02/24 00:43

Ok, hai voluto fare una soluzione che va bene solo per questa applicazione...
Scarica questi due file:
https://www.dropbox.com/scl/fi/g0f06egv ... 3dv1j&dl=0
https://www.dropbox.com/scl/fi/g0f06egv ... 3dv1j&dl=0

Nel tuo file elimina la userform ENTRATA; poi, dal vba, fai Menu /Importa file; scegli ENTRATA.frm (il primo dei due scaricati). Questo ti importera' la userform contenente una Label il cui nome e' Conteggio, un'altra label di intestazione, il codice di inizializzazione della userform:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Me.Conteggio.BackColor = RGB(255, 255, 0)
Me.Conteggio = vbCrLf & ActiveCell.Row - 1
End Sub

Piu' il codice del Commandbutton per la chiusura della form

Lascia il richiamo dalla Worksheet_Change.
Prova quindi a modificare la colonna H e vedi che succede
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 19/02/24 08:28

Buongiorno Anthony!
Anthony47 ha scritto:Ok, hai voluto fare una soluzione che va bene solo per questa applicazione...
Scarica questi due file:
https://www.dropbox.com/scl/fi/g0f06egv ... 3dv1j&dl=0
https://www.dropbox.com/scl/fi/g0f06egv ... 3dv1j&dl=0

Dai link sembrano essere lo stesso file e non due differenti..

Anthony47 ha scritto:Nel tuo file elimina la userform ENTRATA; poi, dal vba, fai Menu /Importa file; scegli ENTRATA.frm (il primo dei due scaricati). Questo ti importera' la userform contenente una Label il cui nome e' Conteggio, un'altra label di intestazione, il codice di inizializzazione della userform:
Codice: Seleziona tutto
Private Sub UserForm_Initialize()
Me.Conteggio.BackColor = RGB(255, 255, 0)
Me.Conteggio = vbCrLf & ActiveCell.Row - 1
End Sub

Piu' il codice del Commandbutton per la chiusura della form

Lascia il richiamo dalla Worksheet_Change.
Prova quindi a modificare la colonna H e vedi che succede

Quando importo da vba ricevo 3 avvisi/errori uno dietro l'altro
Immagine
Immagine
Immagine

Alla fine non era così facile e diretto. :roll: :lol:

Il file log di errore riporta la seguente dicitura:
Codice: Seleziona tutto
Riga 8: riferimento di file non valido nella proprietà OleObjectBlob in Entrata.
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 19/02/24 08:57

Hai scaricato entrambi i file prima di Menu /File /Importa file? Sono ambedue i file nella stessa directory?
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 19/02/24 09:28

Anthony47 ha scritto:Hai scaricato entrambi i file prima di Menu /File /Importa file? Sono ambedue i file nella stessa directory?

Certo ma li scarica come Entrata.frm poi se scarico il secondo file me lo salva come Entrata(1).frm.
Io credo ci sia un errore nei links.. perchè mi pare sia lo stesso identico file ma linkato 2 volte.

Primo Link:
Codice: Seleziona tutto
https://www.dropbox.com/scl/fi/g0f06egvf90ucir4ccxb0/Entrata.frm?rlkey=j1vn86vklh8wyfy4zgfj3dv1j&dl=0

Secondo Link:
Codice: Seleziona tutto
https://www.dropbox.com/scl/fi/g0f06egvf90ucir4ccxb0/Entrata.frm?rlkey=j1vn86vklh8wyfy4zgfj3dv1j&dl=0


Immagine Immagine
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 19/02/24 09:48

HAI SBAGLIATO A SCARICARE IL SECONDO FILE :D :D :oops:
Scarica QUESTO e riprova:
https://www.dropbox.com/scl/fi/yf3gu4ts ... 8uxbm&dl=0
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 19/02/24 10:03

Anthony47 ha scritto:HAI SBAGLIATO A SCARICARE IL SECONDO FILE :D :D :oops:
Scarica QUESTO e riprova:
https://www.dropbox.com/scl/fi/yf3gu4ts ... 8uxbm&dl=0

:lol: :lol: :lol: Si ho sbagliato io a scaricare.

Ora funziona perfettamente! ;)
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 19/02/24 16:51

:lol: :lol: :lol: Si ho sbagliato io a scaricare
Che sia l'ultima volta...
:diavolo: :diavolo:
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 14/03/24 09:31

BUONGIORNO ANTHONY!
Dopo 2 giorni di "strolgo" in cui ho letto e sperimentato i tuoi consigli, SONO RIUSCITO A FARE QUELLO CHE VOLEVO (per quanto riguarda l'inserimento di una lunga stringa da splittare) ora c'è un piccolo particolare/difetto e cioè che il pop-up con indicato il numero della riga non appare.
Ho provato a cambiare il dato
Codice: Seleziona tutto
Set KeyCells = Range("I2:I201")

Questo Range di celle si attiva non per la macro, ma perchè reagisce al riempimento delle celle comprese nelle colonne H2:H201.
Ma non appare comunque.. cosa manca?
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 15/03/24 15:56

Ho risolto anche questo problema come per la macro del salvataggio automatico, ho inserito il richiamo Entrata.Show in fondo alla macro delle piantine.. ed anche in questo caso, incredibilmente funziona.
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40

Re: Macro che indica la riga prima della cella attiva

Postdi Anthony47 » 16/03/24 00:22

Sono in giro e ho difficoltà a seguire il forum, ma vedo che la necessità aguzza l'ingegno...
Avatar utente
Anthony47
Moderatore
 
Post: 19225
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che indica la riga prima della cella attiva

Postdi systemcrack » 16/03/24 08:38

Non ti preoccupare Anthony.. anzi grazie del pensiero. Anche il tuo silenzio è stato utile.
Avatar utente
systemcrack
Utente Senior
 
Post: 280
Iscritto il: 27/07/17 09:40


Torna a Applicazioni Office Windows


Topic correlati a "Macro che indica la riga prima della cella attiva":


Chi c’è in linea

Visitano il forum: Nessuno e 119 ospiti