IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Excel
  New Posts New Posts RSS Feed - [RISOLTO] For unico con unica var j
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

[RISOLTO] For unico con unica var j

 Post Reply Post Reply
Author
Message
il_betto View Drop Down
Veterano
Veterano
Avatar

Joined: 13/Giu/2011
Status: Offline
Points: 3332
Post Options Post Options   Thanks (0) Thanks(0)   Quote il_betto Quote  Post ReplyReply Direct Link To This Post Topic: [RISOLTO] For unico con unica var j
    Posted: 09/Nov/2018 at 11:13
Ciao a Tutti,

ho il seguente codice funzionante:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
                
    Dim j As Integer, p As Integer, q As Integer
    Dim r As Long
    On Error GoTo errori
    ActiveSheet.Unprotect
    Application.EnableEvents = False
    
    
    With ActiveSheet.PageSetup
        .Zoom = False
        .Orientation = xlLandscape
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .RightFooter = Format(Now(), "dd/mm/yyyy")
        ActiveSheet.Columns("D:AH").ColumnWidth = 3
        ActiveSheet.Range("D8:AH9").Font.Name = "Arial"
        ActiveSheet.Range("D8:AH9").Font.Size = 8
        ActiveSheet.Range("D8:AH9").HorizontalAlignment = xlCenter
        For r = 11 To 25 Step 2
            ActiveSheet.Range("D" & r & " :AH" & r).Font.Name = "Arial"
            ActiveSheet.Range("D" & r & " :AH" & r).Font.Size = 8
            ActiveSheet.Range("D" & r & " :AH" & r).HorizontalAlignment = xlCenter
        Next r
        ActiveSheet.Range("D28:AH31").Font.Name = "Arial"
        ActiveSheet.Range("D28:AH31").Font.Size = 8
        ActiveSheet.Range("D28:AH31").HorizontalAlignment = xlCenter
    End With
    
    
    If ActiveSheet.Index < 13 Then
       '
       If Replace(ActiveSheet.Range("AI31"), ".", ",") >= Replace(Mid(ActiveSheet.Range("AJ31").Value, 8), ",0", "") Then
          '
          For j = 11 To 25 Step 2
              If (((Cells(j, 2) > "" And Left(Cells(j, 35), 1) = "0")) Or ((Cells(j, 2) = "" And Left(Cells(j, 35), 1) > "0"))) Then
                 p = 0
                 MsgBox "Impossibile stampare." & vbNewLine & vbNewLine & "Controllare di aver inserito la Commessa e/o le Ore corrispondenti !!"
                 Cancel = True
                 GoTo xit
              Else
                 p = 1
              End If
          Next j
          For j = 28 To 30 Step 1
              If (((Cells(j, 2) > "" And Left(Cells(j, 35), 1) = "0")) Or ((Cells(j, 2) = "" And Left(Cells(j, 35), 1) > "0"))) Then
                 q = 0
                 MsgBox "Impossibile stampare." & vbNewLine & vbNewLine & "Controllare di aver inserito le Causali di Abbattimento e/o le Ore corrispondenti !!"
                 Cancel = True
                 GoTo xit
              Else
                 q = 1
              End If
          Next j
          '
       Else
          Cancel = True
          MsgBox "Impossibile stampare: Ore mensili insufficienti !!"
          GoTo xit
       End If
       '
       If (p = 1 And q = 1) Then '<--- controllo unico
                ActiveWorkbook.Save
                ActiveSheet.Range("AJ31:AK31").Interior.ColorIndex = xlNone
                ActiveSheet.Range("AJ31:AK31").Font.ColorIndex = 2
                ActiveSheet.Range("A1:AN34").PrintOut
                Application.EnableEvents = True
                ActiveSheet.Range("AJ31:AK31").Interior.Color = RGB(255, 255, 102)
                ActiveSheet.Range("AJ31:AK31").Font.ColorIndex = 1
                Cancel = True
       End If
       '
    End If

xit:
    ActiveSheet.Protect
    Application.EnableEvents = True
    Exit Sub
errori:
    MsgBox Err.Description & " - " & Err.Number
    Resume xit
End Sub

in poche parole nel Before_Print si fa un controllo su un range di celle, impedendo all' utente di stampare il file qualora non abbiamo inserito gli opportuni valori.

Scrivo perchŔ volevo chiedere 2 cose:

  • Ŕ possibile accorpare i 2 for disitinti (uno con step 2, l' altro con step 1) in un unico ciclo For ?
  • Ŕ corretto aver usato la variabile j per ambo i cicli ?

Grazie mille come sempre !!!


Edited by il_betto - 12/Nov/2018 at 14:41
Back to Top
Sponsored Links


Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 11215
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 09/Nov/2018 at 13:09
Ciao
l'uso doppio della variabile J non inficia in quanto viene valorizzata una volta =11 e l'altra=28.

Comunque (da provare) potresti tentare nel seguente modo (Tieni presente che ho invertito il significato delle variabili p e q)

...
mmsg1 = "Manca commessa e ore"
mmsg2 = "Manca causali e ore"
p = 0
q = 0
For j = 11 To 30
    If j < 26 And j Mod 2 = 1 Then
        If (((Cells(j, 2) > "" And Left(Cells(j, 35), 1) = "0")) Or ((Cells(j, 2) = "" And Left(Cells(j, 35), 1) > "0"))) Then
            p = 1
            MsgBox mmsg1
            cancel = True
            GoTo xit
        End If
    ElseIf j > 27 Then
        If (((Cells(j, 2) > "" And Left(Cells(j, 35), 1) = "0")) Or ((Cells(j, 2) = "" And Left(Cells(j, 35), 1) > "0"))) Then
            q = 1
            MsgBox mmsg2
            cancel = True
            GoTo xit
        End If
    End If
Next
If p + q = 0 Then
'istruzioni save etc
End If

xit:
'istruzioni

errori:
'istruzioni
.....

saluti



Edited by dodo47 - 09/Nov/2018 at 16:08
domenico
win 10- office 2016
Back to Top
il_betto View Drop Down
Veterano
Veterano
Avatar

Joined: 13/Giu/2011
Status: Offline
Points: 3332
Post Options Post Options   Thanks (0) Thanks(0)   Quote il_betto Quote  Post ReplyReply Direct Link To This Post Posted: 12/Nov/2018 at 14:41
Ciao dodo,

Ŕ perfetto !!!! Grazie mille come sempre !!! Clap Clap Clap
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,063 seconds.