Condividi:        

Numero di pagina associato a riga

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

Numero di pagina associato a riga

Postdi oz85 » 21/06/18 20:15

Ciao a tutti! Torno con nuovo quesito.

Ho un foglio da stampare al quale sono associati delle impostazioni di stampa quindi adattano x righe ad ogni pagina. Per intenderci quindi non esiste una logica precisa con la quale queste righe rientrano in una pagina. Quello che vorrei sapere: è possibile associare ad ogni riga un valore di pagina? Posso dire che se nella prima pagina ci sono 25 righe ognuna delle prime 25 ha quindi il valore pagina 1? Mentre sulla seconda pagina se ci sono 10 righe associare dalla riga 26 alla 36 associare pagina 2?? Spero di essermi espresso bene. Grazie!
oz85
Utente Junior
 
Post: 92
Iscritto il: 26/03/18 14:35

Sponsor
 

Re: Numero di pagina associato a riga

Postdi Anthony47 » 24/06/18 01:24

Ho un foglio da stampare al quale sono associati delle impostazioni di stampa quindi adattano x righe ad ogni pagina
[...]
Quello che vorrei sapere: è possibile associare ad ogni riga un valore di pagina? Posso dire che se nella prima pagina ci sono 25 righe ognuna delle prime 25 ha quindi il valore pagina 1? Mentre sulla seconda pagina se ci sono 10 righe associare dalla riga 26 alla 36 associare pagina 2??
Perdona, per me e' tutto arabo.

L'unica domanda che mi vien da fare per sperare di capire e': Che cosa intendi per "a ogni riga associare un valore di pagina"?

Altra domanda, legata a una ipotesi di soluzione se il tutto avesse un certo significato, e': Sai come si mettono le "Interruzioni di pagina"?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Numero di pagina associato a riga

Postdi Flash30005 » 26/06/18 03:06

Non ho la possibilità di provare questa macro
in pratica assegna un'area di stampa di 25 righe
(un'area è fatta oltre alle righe anche di colonne che non le hai menzionato quindi adatta il codice nella riga evidenziata con <<<)
Codice: Seleziona tutto
Sub StampaPagine()
NP = 0
RigheS = 25         'numero di righe per pagina
UR1 = Range("A" & Rows.Count).End(xlUp).Row
For RR = 1 To UR1 Step RigheS   
    NP = NP + 1
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$" & RR & ":$I$" & NP * RigheS     '<<<<<<<<< colonne da A a I (modifica la lettera I lasciando il simbolo dollaro $ )
    Application.PrintCommunication = False
    ActiveWindow.SelectedSheets.PrintPreview  '>>>>>> qui fa un preview della stampa se non occorre commenta o elimina questa riga
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
Next RR
MsgBox "Stampate n. " & NP & " Pagine"
End Sub


Provala e fai sapere se funziona
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Numero di pagina associato a riga

Postdi oz85 » 26/06/18 10:15

Ciao a tutti e grazie per l'aiuto!

@Anthony
Cerco di spiegarmi meglio. Ho una tabella di dati con impostata un area di stampa che NON contiene un numero definito di righe ma un numero variabile che va da pagina a pagina. Quello che vorrei fare è associare ad ogni singola riga contenuta nell'area di stampa, la pagina nella quale è contenuta, ecco perchè parlavo di associare un valore ad ogni riga, così da poter rapidamente capire in quale pagina essa è contenuta nonostante questa tabella possa essere soggetta a ordinamento (ad esempio filtrando i dati).

@Flash30005
grazie tanto per la macro sviluppata, in luce di quanto scritto sopra per Anthony, occorre testare sempre la macro? si comunque mi occorrono solo i valori di riga, delle colonne mi interessa poco.


In ogni caso posto uno screen così da far meglio capire! Grazie ancora!


Immagine
oz85
Utente Junior
 
Post: 92
Iscritto il: 26/03/18 14:35

Re: Numero di pagina associato a riga

Postdi Flash30005 » 26/06/18 11:00

Ma l'hai provata la mia macro o no?
Se si, cosa è successo?
e cosa non è andato a buon fine?
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Numero di pagina associato a riga

Postdi oz85 » 26/06/18 11:51

Ho appena provato ma non fa quasi nulla... nel senso che mi riadatta l'area di stampa e manda in stampa l'area creata.

Cerco qualcosa di questo tipo:

Immagine

Flash30005 ha scritto:Ma l'hai provata la mia macro o no?
Se si, cosa è successo?
e cosa non è andato a buon fine?
oz85
Utente Junior
 
Post: 92
Iscritto il: 26/03/18 14:35

Re: Numero di pagina associato a riga

Postdi Anthony47 » 27/06/18 02:54

Vediamo se riusciamo a farlo con questa Funzione personalizzata:
Codice: Seleziona tutto
Function PageX(ByRef myC As Range, Optional ByVal Cippa) As Long
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109856&p=644608#p644608
'Restituisce il numero di pagina di una cella
'Uso:   PageX(LaCella [;un valore a piacere])
'       Il secondo parametro e' opzionale, serve a forzare il ricalcolo
'
Dim rbArr(1 To 100) As Long
Dim cbArr(1 To 100) As Long
Dim I As Long, J As Long, K As Long, L As Long
Dim cpArea, gotIt As Boolean
'
'Crea matrice di inizio e fine di ogni Break
rbArr(1) = 1: cbArr(1) = 1
With myC.Parent
For I = 1 To .HPageBreaks.Count
    rbArr(I + 1) = .HPageBreaks(I).Location.Row - 1
Next I
rbArr(I + 1) = Application.Rows.Count
For J = 1 To .VPageBreaks.Count
    cbArr(J + 1) = .VPageBreaks(J).Location.Column - 1
Next J
cbArr(J + 1) = Application.Columns.Count
'determina in quale pagina appartiene l'area
For K = 1 To J
    For L = 1 To I
        PageX = PageX + 1
        Set cpArea = .Range(Cells(rbArr(L), cbArr(K)), Cells(rbArr(L + 1), cbArr(K + 1)))
        If Not Application.Intersect(myC.Cells(1, 1), cpArea) Is Nothing Then
            Exit Function
        End If
    Next L
Next K
End With
End Function
Il codice va messo in un Modulo standard del vba

Poi sul foglio di lavoro, in BP8 scriverai la formula
Codice: Seleziona tutto
=PageX(A8;$U$1)

Poi copia verso il basso secondo necessita'

U1 e' una cella di servizio (se non e' libera nel tuo foglio, usane un'altra); il suo scopo e' forzare il ricalcolo della formula. Nel senso che, se non sei certo del risultato (ad esempio dopo che hai allargato una colonna) bastera' scrivere qualcosa in U1 e la formula si ricalcola

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Numero di pagina associato a riga

Postdi oz85 » 27/06/18 08:15

beh.... cosa dire??? assurdo...

Spenderò qualche giorno a decifrare per bene tutti i passaggi del codice per capirne la logica, comunque ti ringrazio tantissimo Anthony perchè hai risolto un grosso problema al quale non avevo soluzione. Funziona tutto benissimo! ci mette un pò nel fare il calcolo delle pagine ma tanto mi interessa fare il calcolo una sola volta. Funziona alla grande!

Gentilissimo! grazie di tutto!


Anthony47 ha scritto:Vediamo se riusciamo a farlo con questa Funzione personalizzata:
Codice: Seleziona tutto
Function PageX(ByRef myC As Range, Optional ByVal Cippa) As Long
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109856&p=644608#p644608
'Restituisce il numero di pagina di una cella
'Uso:   PageX(LaCella [;un valore a piacere])
'       Il secondo parametro e' opzionale, serve a forzare il ricalcolo
'
Dim rbArr(1 To 100) As Long
Dim cbArr(1 To 100) As Long
Dim I As Long, J As Long, K As Long, L As Long
Dim cpArea, gotIt As Boolean
'
'Crea matrice di inizio e fine di ogni Break
rbArr(1) = 1: cbArr(1) = 1
With myC.Parent
For I = 1 To .HPageBreaks.Count
    rbArr(I + 1) = .HPageBreaks(I).Location.Row - 1
Next I
rbArr(I + 1) = Application.Rows.Count
For J = 1 To .VPageBreaks.Count
    cbArr(J + 1) = .VPageBreaks(J).Location.Column - 1
Next J
cbArr(J + 1) = Application.Columns.Count
'determina in quale pagina appartiene l'area
For K = 1 To J
    For L = 1 To I
        PageX = PageX + 1
        Set cpArea = .Range(Cells(rbArr(L), cbArr(K)), Cells(rbArr(L + 1), cbArr(K + 1)))
        If Not Application.Intersect(myC.Cells(1, 1), cpArea) Is Nothing Then
            Exit Function
        End If
    Next L
Next K
End With
End Function
Il codice va messo in un Modulo standard del vba

Poi sul foglio di lavoro, in BP8 scriverai la formula
Codice: Seleziona tutto
=PageX(A8;$U$1)

Poi copia verso il basso secondo necessita'

U1 e' una cella di servizio (se non e' libera nel tuo foglio, usane un'altra); il suo scopo e' forzare il ricalcolo della formula. Nel senso che, se non sei certo del risultato (ad esempio dopo che hai allargato una colonna) bastera' scrivere qualcosa in U1 e la formula si ricalcola

Ciao
oz85
Utente Junior
 
Post: 92
Iscritto il: 26/03/18 14:35


Torna a Applicazioni Office Windows


Topic correlati a "Numero di pagina associato a riga":


Chi c’è in linea

Visitano il forum: Nessuno e 40 ospiti