Moderatori: Anthony47, Flash30005
[vorrei che] se C6 non è vuoto stampa solo il primo foglio,se C51 non è vuoto stampa i primi 2 fogli, se C96 non è vuoto stampa i primi tre fogli,se C141 non è vuoto stampa i primi 4 fogli, se C186 non è vuoto stampa i primi 5 fogli, se C231 non è vuoto stampa i primi 6 fogli, se C276 non è vuoto stampa i primi 7 fogli, se C321 non è vuoto stampa i primi 8 fogli, se C366 non è vuoto stampa i primi 9 fogli, tutte le celle menzionate contengono formule
Sub TriPrint()
Dim cPg As Long, myC As Range
'
For Each myC In Range("C6,C51,C96,C141,C186,C231,C276,C321,C366")
'Conta pagine:
If Len(myC.Value) = 0 Then
Exit For
Else
cPg = cPg + 1
End If
Next myC
'
If cPg > 0 Then
'scegli printer
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
'
ActiveSheet.PrintOut From:=1, To:=cPg, Copies:=1, IgnorePrintAreas:=False
End If
End Sub
Se le formule puntano ad “altro foglio dello stesso file” allora le formule si aggiornano man mano che togli e aggiungi righe. Se puntano “al altro foglio di altro file” allora le formule si aggiornano se l’altro file e’ aperto mentre aggiungi e togli righe; se invece l’altro foglio e’ chiuso i collegamenti vengono alterati, e’ abbastanza problematico ricostruirliho provato ad eliminare una riga e siccome le celle eliminate sono collegate con formula in altro foglio, c'è modo di far si che o aggiungo o elimino righe in automatico le coordinate celle formule si aggiornano?
Parli della macro che aggiunge le righe?e se si puo tornare indietro, una volta partita la macro, anche solo di qualche passo
Sub KillLast()
Dim lAdd As Long
'
lAdd = Evaluate("Max(If(A1:A" & ActiveCell.Row & " = "" . "",row(A1:A" & ActiveCell.Row & "),""""))")
If lAdd > 0 Then
Application.EnableEvents = False
Cells(lAdd, 1).EntireRow.Delete Shift:=xlUp
Application.EnableEvents = True
End If
End Sub
Invece che xlThick puoi usare (nel codice della macro) xlMedium oppure xlThinUn'altra cosa il bordo che compare sulla riga è troppo spesso
Probabilmente ho interpretato male la tua descrizione alquanto “stringata”; riproviamo con questa:la macro stampa non parte
Sub TriPrint2()
Dim cPg As Long, rArr, I As Long
'
'Calcola quante pagine
rArr = Array(6, 51, 96, 141, 186, 231, 276, 321, 366) 'Quali righe testare
For I = 0 To UBound(rArr)
If Len(Cells(rArr(I), "C").Value) > 0 Then cPg = I + 1
Next I
'
Debug.Print "cPg=" & cPg
If cPg > 0 Then
'scegli printer
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
'
ActiveSheet.PrintOut From:=1, to:=cPg, Copies:=1, IgnorePrintAreas:=False
End If
End Sub
Per tornare indietro di un passo sull’ampliamento di riga + bordo superiore prova a usare questa macro:la macro torna indietro, è per quella che inserisce il bordo
Sub BackOne()
Dim I As Long
'
defH = 22 '<<< L'Altezza in pixel se cella vuota
'
For I = ActiveCell.Row To 1 Step -1
If Cells(I, 1).Borders(xlEdgeTop).LineStyle = 1 Then
Cells(I, 1).EntireRow.Borders(xlEdgeTop).LineStyle = xlNone
Cells(I, 1).EntireRow.RowHeight = defH
Exit For
End If
Next I
End Sub
Se dopo una stampa apri la “finestra Immediata” del vba dovresti vedere la scritta “cPg=x”, dove X indica il numero di pagine che la macro ha comandato di stampare.le macro delle stampe vanno bene tutte e [. . . ] però stampa anche i foglio successivo
[...] e almeno l’area di pag 3 per avere conferma di un’idea che mi son fatto sulla base dell’area delle prime due pagine
Ma la verifica sulla “finestra Immediata” che esito ha dato?
Sub TriPrint33()
Dim cPg As Long, myC As Range
'
For Each myC In Range("B6,B51,B96,B141,B186,B231,B276,B321,B366")
'Conta pagine:
If Len(myC.Value) = 0 Then
Exit For
Else
cPg = myC.Row + 42 - 5
End If
Next myC
Debug.Print "cPg=" & cPg
'
If cPg > 6 Then
'scegli printer
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
'
Debug.Print "Print area is: " & "$B$1:$K$" & cPg
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.PageSetup.PrintArea = "$B$1:$K$" & cPg
Application.PrintCommunication = False
ActiveSheet.PageSetup.FitToPagesWide = 1
Application.Wait (Now + TimeValue("0:00:02"))
Application.PrintCommunication = True
ActiveSheet.PrintOut IgnorePrintAreas:=False
End If
End Sub
If Len(myC.Value) < 2 Then
Sub TriPrint33()
Dim cPg As Long, myC As Range
'
For Each myC In Range("B6,B51,B96,B141,B186,B231,B276,B321,B366")
'Conta pagine:
If Len(myC.Value) < 2 Then 'MM
Exit For
Else
cPg = myC.Row + 42 - 5
End If
Next myC
Debug.Print "cPg=" & cPg
'
If cPg > 6 Then
'scegli printer
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
'
Debug.Print "Print area is: " & "$B$1:$K$" & cPg
ActiveSheet.PageSetup.PrintArea = ""
ActiveSheet.PageSetup.PrintArea = "$B$1:$K$" & cPg
Application.PrintCommunication = False
ActiveSheet.PageSetup.FitToPagesWide = 1
ActiveSheet.PageSetup.FitToPagesTall = 0 '++
Application.Wait (Now + TimeValue("0:00:02"))
Application.PrintCommunication = True
ActiveSheet.PrintOut IgnorePrintAreas:=False
End If
End Sub
If Len(myC.Value) <= 2 Then
Quale e' il contenuto di foglio MATRICOLA (hai condiviso un file con fogli vuoti)?il foglio matricola continua a non adattarsi
No, deve rimanere If Len(myC.Value) < 2 Thenper il fatto delle due lettere dimmi se è corretto così
- Codice: Seleziona tutto
If Len(myC.Value) <= 2 Then
Torna a Applicazioni Office Windows
Importare immagini a seconda del testo in una cella Autore: Paolo67met |
Forum: Applicazioni Office Windows Risposte: 4 |
Inserire valore di una cella in altra cella con testo Autore: Ricky0185 |
Forum: Applicazioni Office Windows Risposte: 17 |
Creare un file Excel con fogli visibili in base all'accesso Autore: JanVathek |
Forum: Applicazioni Office Windows Risposte: 28 |
cerca.x che cerca il secondo valore trovato Autore: marcoc |
Forum: Applicazioni Office Windows Risposte: 3 |
Macro crea file word rinominato come dato in specifica cella Autore: systemcrack |
Forum: Applicazioni Office Windows Risposte: 11 |
Visitano il forum: Marius44 e 10 ospiti