
Sub esplodiordini()
'dichiarazione variabili'
Dim Contatore_righe_ordini, riga_finale_ordini, contatore_righe_articoli, contatore_righe_distinta, riga_finale_distinta As Integer
Dim Codice_padre As String
Dim Riga_ordine, Riga_distinta As Range
'inizializzazione variabili'
Contatore_righe_ordini = 2
riga_finale_ordini = 0
contatore_righe_articoli = 2
contatore_righe_distinta = 2
riga_finale_distinta = 0
Riga_ordine = ""
Codice_padre = ""
'Trova la riga finale degli ordini'
riga_finale_ordini = Sheets("ordini").Range("A1").End(xlDown).Row
'Avvia Ciclo primario relativo ai codici padre'
For Contatore_righe_ordini = 2 To riga_finale_ordini
'Spostati su worksheet di destinazione "ordini" del file principale e memorizza codice padre'
Codice_padre = Worksheets("ordini").Cells(Contatore_righe_ordini, 1).Value
Riga_ordine = Worksheets("ordini").Cells(Contatore_righe_ordini, 3).Value
'Apri il file distinta associata al codice padre'
Workbooks.Open Filename:="Z:UNI EN ISO 9001MarcoMacro per gestione assemblati" & Codice_padre & ".xlsx"
Workbooks(Codice_padre & ".xlsx").Worksheets("Foglio1").Activate
'Trova la riga finale della distinta'
riga_finale_distinta = Sheets("Foglio1").Range("A1").End(xlDown).Row
'Avvia ciclo secondario relativo ai codici figlio'
For contatore_righe_distinta = 2 To riga_finale_distinta
'Incolla riga selezionata codice padre in worksheet "articoli"'
'Copia e incolla riga codice figlio in worksheet "articoli"'
Workbooks(Codice_padre & ".xlsx").Worksheets("Foglio1").Cells(contatore_righe_distinta, 1).Select
Worksheets("articoli").Cells(contatore_righe_articoli, 4).Value = Riga_ordine
'Incrementa contatore_righe_articoli di 1'
contatore_righe_articoli = contatore_righe_articoli + 1
'fine ciclo secondario'
Next
'fine ciclo primario'
Next
End Sub
|
Set wk2 = Workbooks.Open(ThisWorkbook.Path & "" & v & ".xlsx")
Option Explicit
Sub esplodiordini_VF()
Dim dict As Object, dict2 As Object
Dim wk1 As Workbook, wk2 As Workbook
Dim tabella As Range, tabella2 As Range
Dim cel As Range, cel2 As Range
Dim ri As Range
Dim i As Long, iRow As Long
Dim s As String
Dim v As Variant, k As Variant
Application.ScreenUpdating = False
Sheets("ordini").Select
Set tabella = Range("A1").CurrentRegion.Offset(1).Resize(Range("A1").CurrentRegion.Rows.Count - 1)
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To tabella.Columns(1).Cells.Count
s = tabella.Columns(1).Cells(i)
If Not dict.exists(s) Then dict.Add s, i 'key, item: codice padre, indice
Next
Sheets("articoli").Select
Range("A2..G5000").ClearContents
Set wk1 = ThisWorkbook
For Each v In dict
Set wk2 = Workbooks.Open(ThisWorkbook.Path & "" & v & ".xlsx")
Set dict2 = CreateObject("Scripting.Dictionary")
With wk2.Sheets("Foglio1")
Set tabella2 = .Range("A1").CurrentRegion.Offset(1).Resize(.Range("A1").CurrentRegion.Rows.Count - 1)
For Each cel2 In tabella2.Rows
s = cel2.Cells(1)
If Not dict2.exists(s) Then
dict2.Add s, Array(CStr(cel2.Cells(2)), CStr(cel2.Cells(3))) 'Tipo, Consumo unitario
End If
Next
End With
wk2.Close False
iRow = 2
For Each ri In tabella.Rows
If ri.Cells(1) = v Then
For Each k In dict2
Cells(iRow, "A") = v
Cells(iRow, "B") = ri.Cells(2)
Cells(iRow, "C") = ri.Cells(3)
Cells(iRow, "D") = k
Cells(iRow, "E") = dict2(k)(0)
Cells(iRow, "F") = dict2(k)(1)
iRow = iRow + 1
Next
End If
Next
Next
Application.ScreenUpdating = True
MsgBox "Finito!", vbInformation
End Sub |
