Routine Pubbliche



  • Routine Pubbliche
    di trump61 data: 31/01/2016 19:57:07

    Ciao a tutti, forse sto scrivendo una grossa stupidaggine, mi servirebbe usare una variabile che prende il valore da una routine Select Case su 12 codici similari, ognuno realizza su un foglio un tirno mensile in base ad una "Stecca" presente su un altro foglio cioè quello che sul listato si chiama Cognomi (quella che io chiamo stecca si puo' definire matrice?) in pratica a far cambiare il valore di questa variabile è la scelta dell' anno di cui vogliamo realizzare il turno ad esempio di gennaio. Mi pare che se rendo Public mettendolo in testa al modulo posso usare il valore della variabile negli altri listati, sicuramente non è così perchè in una prova che ho fatto, che è il codice qui sotto mi ricompone il codice del 2016. il numero 42006 deriva da alcune formule. il listato gennaio funziona correttamente mi riproduce esattamente il turno mensile del reparto. vorrei usare appunto la Variabile F per cambiare gli anni in pratica per stilare i turni del 2017 42006 deve diventare 42008 perche viene dopo un anno bisestile per il 2018 deve diventare 42009 e così via.
    Sicuramente non si può fare come ho fatto io sbaglio?
    Scusate un altra richiesta mi ricordo che sull' editor si potevano vedere i valori che le varibili prendevano durante l' esecuzione del codice non mi ricordo come si faceva potresste aiutarmi anche in questa cosa  
     
    Public Sub annow()
    Dim F As Long
    Dim P As Long
    Dim sh1 As Worksheet: Set sh1 = Worksheets("TurnoMensile")
    P = sh1.Range("A1").Value
    Select Case P
      Case Is = 2016
        F = 0
       Case Is = 2017
          F = 2
          Case Is = 2018
            F = 3
       Case Is = 2019
          F = 4
          Case Is = 2020
          F = 5
          Case Is = 2021
          F = 7
          Case Is = 2022
          F = 8
          End Select
    End Sub
    
    
    Sub Gennaio()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("TurnoMensile")
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Cognomi")
    Dim X As Long, Y As Long, W As Long, R As Long, DData As Date
    Application.ScreenUpdating = False
        sh2.Columns("K").ClearContents
        R = sh2.Cells(1, 12)
        giorni31
        sh1.Range("A3").Value = 1
    For W = 1 To 3
        For X = 1 To 52
            For Y = 3 To 9
                sh2.Cells(R, 11) = sh2.Cells(X, Y)
                R = R + 1
            Next Y
        Next X
    Next W
    Y = 3
    sh1.Range("B3:AF36").ClearContents
        For X = 2 To 32 ' colonne
            sh1.Cells(Y, X) = Left(WeekdayName(Weekday(DateValue(sh1.Cells(2, X) & "/" & sh1.Cells(Y, 1) & "/" & sh1.Cells(1, 1)), 2)), 1)
        Next X
            Y = Y + 2
            R = 42006 + F
            For G = 0 To 175 Step 7
            For D = 4 To 36
            sh2.Range(sh2.Cells(R + G, 11), sh2.Cells(R + G + 30, 11)).Copy
            sh1.Cells(D, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
            G = G + 7
           Next D
          Next G
    Application.ScreenUpdating = True
    Set sh1 = Nothing
    Set sh2 = Nothing
    
    'Pasqua
    colorariposieam1
    grigliamensile
    Range("B1").Select
    
    End Sub



  • di patel data: 31/01/2016 20:11:39

    1) basta dichiarare la variabile prima della sub per renderla disponibile alle altre sub
    2) lancia la macro con F8, step by step e posiziona il cursore sulla variabile





  • di trump61 data: 31/01/2016 20:25:09

    Ho scritto una corbelleria ho letto la parte del corso che c'è qui sul orum che riguarda le Variabili, credevo di aver capito e ho cambiato il codice ma non funziona ugualmente
    Uso la prima parte del codice per selezionare il mese che mi serve visualizzare sul foglio usando una celle con convalida dei dati per avere un elenco dei mesi da selezionare e far partire la routine del mese che voglio, ho pensato di far partire anche la routine che seleziona con un altra cella con convalida dei dati l'anno per far in modo che la variabile pubblica F assuma il valore che mi serve per determinare l'anno di cui voglio ad esempio visualizzare il turno mensile, ma evidentemente non ho capito neanche questa volta
     
    'questo sul modulo del foglio "TurnoMensile"
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim sh1 As Worksheet: Set sh1 = Worksheets("TurnoMensile")
        Set KeyCells = Range("A2")
        
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
           seleziona_mesi
           TextBox1.Value = sh1.Range("A2").Value
           annow
        End If
    End Sub
    
    'Questo su un modulo
    
     Public F As Long
     
     
     Sub annow()
    Dim F As Long
    Dim P As Long
    Dim sh1 As Worksheet: Set sh1 = Worksheets("TurnoMensile")
    P = sh1.Range("A1").Value
    Select Case P
      Case Is = 2016
        F = 0
       Case Is = 2017
          F = 2
          Case Is = 2018
            F = 3
       Case Is = 2019
          F = 4
          Case Is = 2020
          F = 5
          Case Is = 2021
          F = 7
          Case Is = 2022
          F = 8
          End Select
    End Sub
    Sub Gennaio()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("TurnoMensile")
    Dim sh2 As Worksheet: Set sh2 = Worksheets("Cognomi")
    Dim X As Long, Y As Long, W As Long, R As Long, DData As Date
    Application.ScreenUpdating = False
        sh2.Columns("K").ClearContents
        R = sh2.Cells(1, 12)
        giorni31
        sh1.Range("A3").Value = 1
    For W = 1 To 3
        For X = 1 To 52
            For Y = 3 To 9
                sh2.Cells(R, 11) = sh2.Cells(X, Y)
                R = R + 1
            Next Y
        Next X
    Next W



  • di trump61 data: 31/01/2016 20:32:44

    patel grazie per la tua risposta.
    con il secondo codice la parte che deve calcolarmi funziona e la parte della stesura dei turni che non va devo vedere dove sta il problema



  • di trump61 data: 05/02/2016 22:10:12

    Ciao, questa parte non capisco perchè non Funziona R = 42006 + F.
    allora come già ho detto 42006 è un numero che scaturisce da una serie di formule ed è la riga da dove deve cominciare a copiare i turni(stanno dalla riga 41890 alla riga 42320). il numero cambia al variare dell'anno scelto il 2017 equivale a 42008 perchè viiene dopo anno bisestile. il 2018 equivale a 42009 il 2019 equivale a 42010 e così via. Se io inserisco il valore di R manualmente il risultato dei turni è giusto se uso R = 42006 + F no, qualcuno può illuminarmi e rimettermi sulla retta via grazie



  • di patel data: 06/02/2016 09:12:48

    non ho capito niente, allega il file e spiega meglio





  • di trump61 data: 09/02/2016 16:19:25

    Non so cosa dire con la stessa riga di codice adesso funziona