Sunteți pe pagina 1din 5

Sub Example()

Dim StructureFile As Workbook


Dim SourceFile As Workbook
Dim arraySheet As Variant
Dim ratioWorksheetName As String
Dim weightWorksheetName As String
Dim manualpointsWorksheetName As String
Dim structureWorksheetName As String

Dim materialCode As String

Dim materialCodeStart As Integer


Dim materialCodeOffset As Integer
Dim materialCodeCountMax As Integer

ratioWorksheetName = "RATIO"
weightWorksheetName = "WEIGHT"
manualpointsWorksheetName = "Manual Points"
structureWorksheetName = "structure"

arraySheet = Array(ratioWorksheetName, manualpointsWorksheetName,


weightWorksheetName)

materialCode = "Material code"

materialCodeStart = 4
materialCodeOffset = 2
materialCodeCountMax = 5

FileChoose = Application.GetOpenFilename(Title:="Please choose a file to open",


FileFilter:="Excel File *xls*(*xls*),")
If FileChoose = False Then
MsgBox ("No File selected")
Exit Sub
Else
Set SourceFile = Workbooks.Open(Filename:=FileChoose)
End If
Set mySh = CreateObject("Shell.Application")
Set myPath = mySh.BrowseForFolder(&O0, "Pls select folder", &H1 + &H10,
"E:\VBA\test")
If myPath Is Nothing Then
Exit Sub
End If
FolderNN = myPath.Items.Item.Path
Set FileNN = myPath
Set mySh = Nothing
Set myPath = Nothing
Set myFS = CreateObject("Scripting.FileSystemObject")
For Each myXLS In myFS.GetFolder(FolderNN).Files
If LCase(myFS.GetExtensionName(myXLS)) = "xls" Or
LCase(myFS.GetExtensionName(myXLS)) = "xlsx" Then
Set StructureFile = Workbooks.Open(Filename:=myXLS, ReadOnly:=False)
Dim structureRowIndex As Integer
'i: structure row index
structureRowIndex = 2
Dim structureWorksheet As Worksheet
Set structureWorksheet = StructureFile.Worksheets(structureWorksheetName)
Dim ratioWorksheet As Worksheet
Set ratioWorksheet = SourceFile.Worksheets(ratioWorksheetName)
Dim weightWorksheet As Worksheet
Set weightWorksheet = SourceFile.Worksheets(weightWorksheetName)
Dim manualPointsWorksheet As Worksheet
Set manualPointsWorksheet =
SourceFile.Worksheets(manualpointsWorksheetName)

Set structureSignCell = structureWorksheet.Cells(structureRowIndex, 1)


Do While structureSignCell.Value = "vq":
Vendor = structureWorksheet.Cells(structureRowIndex, 6).Value
PartNo = structureWorksheet.Cells(structureRowIndex, 4).Value
PartLevel = structureWorksheet.Cells(structureRowIndex, 3).Value
'j: data row index
dataRowIndex = 2
Set ratioFirstCell = ratioWorksheet.Cells(dataRowIndex, 1)
Do While ratioFirstCell.Value <> 0
If ratioWorksheet.Cells(dataRowIndex, 2).Value = PartNo And
StrComp(Left(Vendor, 1), "5") Then
'Next row can contain part with lower level
subPartIndex = structureRowIndex + 1
Do While structureWorksheet.Cells(subPartIndex, 3).Value <>
PartLevel
subPartIndex = subPartIndex + 1
Loop
If structureWorksheet.Cells(subPartIndex, 4) = PartNo Then
structureWorksheet.Cells(structureRowIndex, 15).Value = 100
- ratioWorksheet.Cells(dataRowIndex, 4).Value
structureWorksheet.Cells(stuctureRowIndex, 15).Font.Color =
vbRed
Call Update(StructureFile, ThisWorkbook, structureRowIndex)
Else
structureWorksheet.Rows(structureRowIndex).Copy
structureWorksheet.Rows(subPartIndex).Insert
shift:=xlShiftUp
Application.CutCopyMode = False
structureWorksheet.Cells(subPartIndex, 6).Value =
ratioWorksheet.Cells(dataRowIndex, 3).Value
structureWorksheet.Cells(structureRowIndex, 15).Value = 100
- ratioWorksheet.Cells(dataRowIndex, 4).Value
structureWorksheet.Cells(structureRowIndex, 15).Font.Color
= vbRed
Call Update(StructureFile, ThisWorkbook, structureRowIndex)
End If
ElseIf ratioWorksheet.Cells(dataRowIndex, 2).Value = PartNo Then
structureWorksheet.Cells(structureRowIndex, 15).Value =
ratioWorksheet.Cells(dataRowIndex, 4).Value
structureWorksheet.Cells(structureRowIndex, 15).Font.Color =
vbRed
Call Update(StructureFile, ThisWorkbook, structureRowIndex)
End If
dataRowIndex = dataRowIndex + 1
Set ratioFirstCell = ratioWorksheet.Cells(dataRowIndex, 1)
Loop
weightRowIndex = 2
blockCode = structureWorksheet.Cells(structureRowIndex, 6).Value
' Finding the list of material
' Dim materialTitleList() As Variant
' ReDim materialTitleList(5)
Dim materialTitleList(1 To 5) As Integer
materialTitleColumn = materialCodeStart
Set materialTitleCell = weightWorksheet.Cells(1, materialCodeStart)
materialColumnCount = 1

Do While Not IsEmpty(materialTitleCell.Value) And


Left(materialTitleCell.Value, Len(materialCode)) = materialCode:
materialTitleList(materialColumnCount) = materialTitleColumn
materialColumnCount = materialColumnCount + 1
materialTitleColumn = materialTitleColumn + materialCodeOffset
Set materialTitleCell = weightWorksheet.Cells(1,
materialTitleColumn)
Loop
weight_ratioColumn = materialTitleColumn + 1
sub_ratioColumn = materialTitleColumn + 2
co_ratioColumn = sub_ratioColumn + 1
Do While weightWorksheet.Cells(weightRowIndex, 1).Value <> 0
materialColumnCount = 1
materialColumn = materialTitleList(materialColumnCount)
Do While materialColumn <> 0 And Not
IsEmpty(weightWorksheet.Cells(weightRowIndex, materialColumn))
material = weightWorksheet.Cells(weightRowIndex,
materialColumn).Value
rowOffset = materialColumnCount
If (weightWorksheet.Cells(weightRowIndex, 2).Value =
PartNo) And (structureWorksheet.Cells(structureRowIndex + 1, 4).Value <> material)
Then

structureWorksheet.Rows(structureRowIndex).Offset(rowOffset).Insert
structureWorksheet.Cells(structureRowIndex + rowOffset,
4).Value = weightWorksheet.Cells(weightRowIndex,
materialTitleList(materialColumnCount)).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
5).Value = weightWorksheet.Cells(weightRowIndex,
materialTitleList(materialColumnCount)).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
10).Value = weightWorksheet.Cells(weightRowIndex, weight_ratioColumn).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
12).Value = weightWorksheet.Cells(weightRowIndex, weight_ratioColumn).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
3).Value = "00" + CStr(CInt(PartLevel) + 1)
structureWorksheet.Cells(structureRowIndex + rowOffset,
1).Value = "vq"
structureWorksheet.Cells(structureRowIndex + rowOffset,
13).Value = weightWorksheet.Cells(weightRowIndex, sub_ratioColumn).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
14).Value = weightWorksheet.Cells(weightRowIndex, co_ratioColumn).Value
structureWorksheet.Cells(structureRowIndex + rowOffset,
15).Value = structureWorksheet.Cells(structureRowIndex + 1, 14).Value *
structureWorksheet.Cells(structureRowIndex + 1, 13).Value *
structureWorksheet.Cells(structureRowIndex, 15).Value / 10000
structureWorksheet.Rows(structureRowIndex +
rowOffset).Font.Color = vbRed
End If
materialColumnCount = materialColumnCount + 1
materialColumn = materialTitleList(materialColumnCount)
If materialColumn = 0 Then Exit Do
Loop

'Material = weightWorksheet.Cells(l, 4).Value


'If (weightWorksheet.Cells(l, 2).Value = PartNo) And
(structureWorksheet.Cells(l + 1, 4).Value <> Material) Then
'structureWorksheet.Rows(i).Offset(1).Insert
'structureWorksheet.Cells(i + 1, 4).Value =
weightWorksheet.Cells(l, 4).Value
'structureWorksheet.Cells(i + 1, 5).Value =
weightWorksheet.Cells(l, 5).Value
'structureWorksheet.Cells(i + 1, 10).Value =
weightWorksheet.Cells(l, 7).Value
'structureWorksheet.Cells(i + 1, 12).Value =
weightWorksheet.Cells(l, 7).Value
'structureWorksheet.Cells(i + 1, 3).Value = "00" +
CStr(CInt(PartLevel) + 1)
'structureWorksheet.Cells(i + 1, 1).Value = "vq"
'structureWorksheet.Cells(i + 1, 13).Value =
weightWorksheet.Cells(l, 10).Value
'structureWorksheet.Cells(i + 1, 14).Value =
weightWorksheet.Cells(l, 11).Value
'structureWorksheet.Cells(i + 1, 15).Value =
structureWorksheet.Cells(i + 1, 14).Value * structureWorksheet.Cells(i + 1,
13).Value * structureWorksheet.Cells(i, 15).Value / 10000
'structureWorksheet.Rows(i + 1).Font.Color = vbRed
'End If
'l = l + 1
weightRowIndex = weightRowIndex + 1
Loop

structureRowIndex = structureRowIndex + 1
Set structureSignCell = structureWorksheet.Cells(structureRowIndex, 1)
Loop
'ThisWorkbook.Worksheets(1).Rows(3).Offset(1).Insert
'StructureFile.Close SaveChanges:=True
End If
Next
SourceFile.Close SaveChanges:=False
End Sub

Sub Update(StructureFile As Workbook, ThisWorkbook As Workbook, from As Integer)


Dim structureWorksheet As Worksheet
Set structureWorksheet = StructureFile.Worksheets("structure")
PartLevel = structureWorksheet.Cells(from, 3).Value
IntLevel = CInt(PartLevel)
ThisWorkbook.Worksheets(1).Cells(IntLevel, 1).Value =
structureWorksheet.Cells(from, 15).Value
i = from + 1
Do While (structureWorksheet.Cells(i, 3).Value <> PartLevel)
x = structureWorksheet.Cells(i, 3).Value
intx = CInt(x)
structureWorksheet.Cells(i, 15).Value = structureWorksheet.Cells(i,
13).Value * structureWorksheet.Cells(i, 14).Value *
ThisWorkbook.Worksheets(1).Cells(intx - 1, 1).Value / 10000
structureWorksheet.Cells(i, 15).Font.Color = vbRed
ThisWorkbook.Worksheets(1).Cells(intx, 1).Value =
structureWorksheet.Cells(i, 15).Value
i = i + 1
Loop
End Sub

Function isInhouse(vendorCode As String)


Set isInhouse = StrComp(Left(Vendor, 1), "5")
End Function

S-ar putea să vă placă și