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