Vba ripetitivo mensilmente

di il
1 risposte

Vba ripetitivo mensilmente

Buongiorno, 

mi sono appena iscritto e sono alla ricerca di un consiglio su come snellire il mio codice vba.

La mia situazione è che da access esporto una query formato excel.xlsx che tramite vba, presente nel file di destinazione, aggiorna quest'ultimo per tutti i mesi.

I  dati, come vedrete dal codice, sono anche in formato [h]:mm. Vi allego il codice sperando di riuscire a snellirlo.  

Private Sub Workbook_open()
    Dim WK1 As Workbook
    Dim WK2 As Workbook
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim sh3 As Worksheet
    Dim sh4 As Worksheet
    Dim sh5 As Worksheet
    Dim sh6 As Worksheet
    Dim sh7 As Worksheet
    Dim sh8 As Worksheet
    Dim sh9 As Worksheet
    Dim sh10 As Worksheet
    Dim sh11 As Worksheet
    Dim sh12 As Worksheet
    Dim sh13 As Worksheet
    Dim FileAltro As String
    
    Application.ScreenUpdating = False
     
   
     
    Set WK1 = ThisWorkbook
    Set WK2 = Workbooks.Open("C:\Users\Documents\Query.xlsx")

    Set sh2 = WK2.Worksheets("Query")
    Set sh1 = WK1.Worksheets(8)
    Set sh3 = WK1.Worksheets(9)
    Set sh4 = WK1.Worksheets(10)
    Set sh5 = WK1.Worksheets(11)
    Set sh6 = WK1.Worksheets(12)
    Set sh7 = WK1.Worksheets(13)
    Set sh8 = WK1.Worksheets(14)
    Set sh9 = WK1.Worksheets(15)
    Set sh10 = WK1.Worksheets(16)
    Set sh11 = WK1.Worksheets(17)
    Set sh12 = WK1.Worksheets(18)
    Set sh13 = WK1.Worksheets(19)
    
    ' Gennaio
    
    sh2.Range("n2").Copy
    sh1.Range("d5").PasteSpecial Paste:=xlValues
    
    sh2.Range("c2").Copy
    sh1.Range("e8").PasteSpecial Paste:=xlValues
    sh1.Range("i8").PasteSpecial Paste:=xlValues
    
    sh2.Range("d2").Copy
    sh1.Range("g8").PasteSpecial Paste:=xlValues
    sh1.Range("h8").PasteSpecial Paste:=xlValues
    
    sh2.Range("f2").Copy
    sh1.Range("e5").PasteSpecial Paste:=xlValues
    sh1.Range("g5").PasteSpecial Paste:=xlValues
    
    sh2.Range("b2").Copy
    sh1.Range("f9").PasteSpecial Paste:=xlValues
    sh2.Range("b2").Copy
    sh1.Range("j9").PasteSpecial Paste:=xlValues
    
    sh2.Range("g2").Copy
    sh1.Range("f3").PasteSpecial Paste:=xlValues
    sh1.Range("h3").PasteSpecial Paste:=xlValues
    
    sh1.Range("I3").Value = sh2.Range("L2") - sh2.Range("g2")
    
    
   ' Febbraio
    
    sh2.Range("n3").Copy
    sh3.Range("d5").PasteSpecial Paste:=xlValues
    
    sh2.Range("c3").Copy
    sh3.Range("e8").PasteSpecial Paste:=xlValues
    
    sh2.Range("d3").Copy
    sh3.Range("g8").PasteSpecial Paste:=xlValues
    
    sh2.Range("F3").Copy
    sh3.Range("e5").PasteSpecial Paste:=xlValues
    
    sh2.Range("b3").Copy
    sh3.Range("f9").PasteSpecial Paste:=xlValues
    
    sh2.Range("g3").Copy
    sh3.Range("f3").PasteSpecial Paste:=xlValues
    
    
    sh3.Range("i8").Value = Application.Sum(sh2.Range("c2:c3"))
    
    
    sh3.Range("h8").Value = Application.Sum(sh2.Range("d2:d3"))
    
   
    sh3.Range("g5").Value = Application.Sum(sh2.Range("f2:f3"))
    
    
    sh3.Range("j9").Value = Application.Sum(sh2.Range("b2:b3"))
    
    
    sh3.Range("h3").Value = Application.Sum(sh2.Range("g2:g3"))
   
    sh3.Range("k5").Value = sh2.Range("l2") - Application.Sum(sh2.Range("g2:g3"))
    
  ' Marzo
    
    sh2.Range("n4").Copy
    sh4.Range("d5").PasteSpecial Paste:=xlValues
    
    sh2.Range("c4").Copy
    sh4.Range("e8").PasteSpecial Paste:=xlValues
    
    sh2.Range("d4").Copy
    sh4.Range("g8").PasteSpecial Paste:=xlValues
    
    sh2.Range("F4").Copy
    sh4.Range("e5").PasteSpecial Paste:=xlValues
    
    sh2.Range("b4").Copy
    sh4.Range("f9").PasteSpecial Paste:=xlValues
    
    sh2.Range("g4").Copy
    sh4.Range("f3").PasteSpecial Paste:=xlValues
    
    
    sh4.Range("i8").Value = Application.Sum(sh2.Range("c2:c4"))
    
    
    sh4.Range("h8").Value = Application.Sum(sh2.Range("d2:d4"))
    
   
    sh4.Range("g5").Value = Application.Sum(sh2.Range("f2:f4"))
    
    
    sh4.Range("j9").Value = Application.Sum(sh2.Range("b2:b4"))
    
    
    sh4.Range("h3").Value = Application.Sum(sh2.Range("g2:g4"))
    
    sh4.Range("k5").Value = sh2.Range("l2") - Application.Sum(sh2.Range("g2:g4"))
    
    ' aprile
    
    sh2.Range("n5").Copy
    sh5.Range("d5").PasteSpecial Paste:=xlValues
    
    sh2.Range("c5").Copy
    sh5.Range("e8").PasteSpecial Paste:=xlValues
    
    sh2.Range("d5").Copy
    sh5.Range("g8").PasteSpecial Paste:=xlValues
    
    sh2.Range("F5").Copy
    sh5.Range("e5").PasteSpecial Paste:=xlValues
    
    sh2.Range("b5").Copy
    sh5.Range("f9").PasteSpecial Paste:=xlValues
    
    sh2.Range("g5").Copy
    sh5.Range("f3").PasteSpecial Paste:=xlValues
    
    
    sh5.Range("i8").Value = Application.Sum(sh2.Range("c2:c5"))
    
    
    sh5.Range("h8").Value = Application.Sum(sh2.Range("d2:d5"))
    
   
    sh5.Range("g5").Value = Application.Sum(sh2.Range("f2:f5"))
    
    
    sh5.Range("j9").Value = Application.Sum(sh2.Range("b2:b5"))
    
    
    sh5.Range("h3").Value = Application.Sum(sh2.Range("g2:g5"))
    
    sh5.Range("k5").Value = sh2.Range("l2") - Application.Sum(sh2.Range("g2:g5"))
   
    Application.CutCopyMode = False
    WK2.Close SaveChanges:=False
    'Dim i As Long, iPos As Long
    Dim iMinuti As Long
    Dim Ora As String
    Dim sRisultato As String
    iMinuti = 0
    
    iMinuti = sh1.Range("f3").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh1.Range("f5").NumberFormat = "[H]:MM"
    sh1.Range("f5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
     
    iMinuti = sh1.Range("h3").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh1.Range("h5").NumberFormat = "[H]:MM"
    sh1.Range("h5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
   
    iMinuti = sh1.Range("J9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh1.Range("j8") = sRisultato
    sh1.Range("j8").NumberFormat = "[H]:MM"
    SommaOre = sRisultato ' restituisce il valore 28:06
    
    
    iMinuti = sh1.Range("f9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh1.Range("f8").NumberFormat = "[H]:MM"
    sh1.Range("f8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    'iMinuti = sh1.Range("I3").Text
    'sRisultato = Format(iMinuti / 60, "00") - 1 & ":" & Format(iMinuti Mod 60, "00")
    sh1.Range("i5").NumberFormat = "[H]:MM"
    sh1.Range("i5") = sh1.Range("K6") 'sRisultato
    'SommaOre = sRisultato  ' restituisce il valore 28:06
    
   iMinuti = sh3.Range("f3").Text
   sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    sh3.Range("f5").NumberFormat = "[H]:MM"
    sh3.Range("f5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
     
    iMinuti = sh3.Range("h3").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh3.Range("h5").NumberFormat = "[H]:MM"
    sh3.Range("h5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
   
    iMinuti = sh3.Range("J9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh3.Range("j8").NumberFormat = "[H]:MM"
    sh3.Range("j8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh3.Range("f9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh3.Range("f8").NumberFormat = "[H]:MM"
    sh3.Range("f8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh3.Range("k5").Text
    sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    sh3.Range("i5").NumberFormat = "[H]:MM"
    sh3.Range("i5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh4.Range("f3").Text
   sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh4.Range("f5").NumberFormat = "[H]:MM"
    sh4.Range("f5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
     
    iMinuti = sh4.Range("h3").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh4.Range("h5").NumberFormat = "[H]:MM"
    sh4.Range("h5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
   
    iMinuti = sh4.Range("J9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh4.Range("j8").NumberFormat = "[H]:MM"
    sh4.Range("j8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh4.Range("f9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh4.Range("f8").NumberFormat = "[H]:MM"
    sh4.Range("f8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh4.Range("k5").Text
    sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    sh4.Range("i5").NumberFormat = "[H]:MM"
    sh4.Range("i5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
     iMinuti = sh5.Range("f3").Text
   sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh5.Range("f5").NumberFormat = "[H]:MM"
    sh5.Range("f5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
     
    iMinuti = sh5.Range("h3").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh5.Range("h5").NumberFormat = "[H]:MM"
    sh5.Range("h5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
   
    iMinuti = sh5.Range("J9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh5.Range("j8").NumberFormat = "[H]:MM"
    sh5.Range("j8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh5.Range("f9").Text
    sRisultato = Format(iMinuti / 1440, "00") & ":" & Format(iMinuti Mod 1440, "00")
    sh5.Range("f8").NumberFormat = "[H]:MM"
    sh5.Range("f8") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    iMinuti = sh5.Range("k5").Text
    sRisultato = Format(iMinuti / 60, "00") & ":" & Format(iMinuti Mod 60, "00")
    sh5.Range("i5").NumberFormat = "[H]:MM"
    sh5.Range("i5") = sRisultato
    SommaOre = sRisultato  ' restituisce il valore 28:06
    
    Application.ScreenUpdating = True
Chiudi:
    Set sh2 = Nothing
    Set sh1 = Nothing
    Set WK1 = Nothing
    Set WK2 = Nothing
    
    
End Sub


1 Risposte

  • Re: Vba ripetitivo mensilmente

    Se per ogni foglio in WK1 fai le stesse operazioni, invece di dichiarare tutti i fogli puoi dichiararne uno solo e ciclare con for each i diversi fogli

    La cosa noiosa sarà adattare il codice, rendere i fogli il più possibile uguali nel senso che per ogni colonna e riga le operazioni da fare siano le stesse

    Giusto un'idea di quello che pensavo..

    Buon divertimento

    Private Sub Workbook_open()
        Dim WK1 As Workbook
        Dim WK2 As Workbook
        Dim sh As Worksheet, shQ As Worksheet
        Dim i as integer
        
        Set WK1 = ThisWorkbook
        Set WK2 = Workbooks.Open("C:\Users\Documents\Query.xlsx")
        Set shQ = WK2.Worksheets("Query")
        i=1 ' Uso i come indice dei fogli
        For each sh in WK1.Worksheets 'Ciclo tutti i fogli in WH1
        	'QUI METTI IL CODICE COMUNE A TUTTI I FOGLI
        	
        	Select Case i 
        	Case 1
        		'CODICE SPECIFICO PER IL FOGLIO GENNAIO
        	Case 2
        		'CODICE SPECIFICO PER IL FOGLIO FEBBRAIO
        	Case 3
        	'.. ecc
        	'.. ecc
        	End Select
        	i=i+1
        next sh
        
Devi accedere o registrarti per scrivere nel forum
1 risposte