간략하게 설명하고 내가 알고있는 것에 충실합니다. 이 코드는 대부분 제대로 작동합니다. 유일한 문제는 x와 z 루프의 반복입니다. 이 to 루프는 범위를 설정하고 Y 루프에 대해 yLABEL을 설정해야합니다. 세트를 통과해서 올바른 거리를 찾아 낼 수 있습니다. 나는 그 중 일부는 x를 벗어나서 z를 설정하지 않은 다음 x를 다시 업데이트하여 범위를 업데이트하는 것과 관련이 있다는 것을 알고 있습니다.VBA 중첩 루프 흐름 제어
작동해야합니다. z는 다음 x입니다. 그들 사이의 범위는 y로 설정됩니다. 그렇다면 다음 x는 있지만 y는 y 사이에 울리고 y는 x로 설정됩니다. 그래서 등등은 계단을 내려 앉은 것처럼 보입니다. 또는 슬라이드 규칙을 설정하는 방법에 따라 슬라이드를 반복하면 몇 번 반복하면 어느 곳에서나 끝납니다.
몇 가지 작업을 수행했지만 x를 설정하여 z를 설정하면 X가 범위의 맨 위에서 다시 시작됩니다. 적어도 그것은 제가 생각하는 것입니다. 예제 시트에서 나는 오프셋이 루프와 함께 작동하는 방식을 변경했으나 아이디어는 여전히 동일합니다. 나는 루프가 작동 한 후에 조건부 스위치를 알아 내려고 노력했다. 도움이되는 방향이나 조언을 주시면 감사하겠습니다.
For Each z In SRCrange2
및 For Each x In SRCrange2
이 도움을합니까, 또는 적어도 당신이 올바른 궤도에 얻을 :
Option Explicit
Sub parse()
Application.DisplayAlerts = False
'Application.EnableCancelKey = xlDisabled
Dim strPath As String, strPathused As String
strPath = "C:\clerk plan2"
Dim objfso As FileSystemObject, objFolder As Folder, objfile As Object
Set objfso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objfso.GetFolder(strPath)
'Loop through objWorkBooks
For Each objfile In objFolder.Files
If objfso.GetExtensionName(objfile.Path) = "xlsx" Then
Dim objWorkbook As Workbook
Set objWorkbook = Workbooks.Open(objfile.Path)
' Set path for move to at end of script
strPathused = "C:\prodplan\used\" & objWorkbook.Name
objWorkbook.Worksheets("inbound transfer sheet").Activate
objWorkbook.Worksheets("inbound transfer sheet").Cells.UnMerge
'Range management WB
Dim SRCwb As Worksheet, SRCrange1 As Range, SRCrange2 As Range, lastrow As Range
Set SRCwb = objWorkbook.Worksheets("inbound transfer sheet")
Set SRCrange1 = SRCwb.Range("g3:g150")
Set SRCrange2 = SRCwb.Range("a1:a150")
Dim DSTws As Worksheet
Set DSTws = Workbooks("clerkplan2.xlsm").Worksheets("transfer")
Dim STR1 As String, STR2 As String, xVAL As String, zVAL As String, xSTR As String, zSTR As String
STR1 = "INBOUND TRANS"
STR2 = "INBOUND CA TRANS"
Dim x As Variant, z As Variant, y As Variant, zxRANGE As Range
For Each z In SRCrange2
zSTR = Mid(z, 1, 16)
If zSTR <> STR2 Then GoTo zNEXT
If zSTR = STR2 Then
zVAL = z
End If
For Each x In SRCrange2
xSTR = Mid(x, 1, 13)
If xSTR <> STR1 Then GoTo xNEXT
If xSTR = STR1 Then
xVAL = x
End If
Dim yLABEL As String
If xVAL = x And zVAL = z Then
If x.Row > z.Row Then
Set zxRANGE = SRCwb.Range(x.Offset(1, 0).Address & " : " & z.Offset(-1, 0).Address)
yLABEL = z.Value
Else
Set zxRANGE = SRCwb.Range(z.Offset(-1, 0).Address & " : " & x.Offset(1, 0).Address)
yLABEL = x.Value
End If
End If
MsgBox zxRANGE.Address ' DEBUG
For Each y In zxRANGE
If y.Offset(0, 6) = "Temp" Or y.Offset(0, 14) = "Begin Time" Or y.Offset(0, 15) = "End Time" Or _
Len(y.Offset(0, 6)) = 0 Or Len(y.Offset(0, 14)) = 0 Or Len(y.Offset(0, 15)) = "0" Then yNEXT
Set lastrow = Workbooks("clerkplan2.xlsm").Worksheets("transfer").Range("c" & DSTws.Rows.Count).End(xlUp).Offset(1, 0)
y.Offset(0, 6).Copy
lastrow.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=True, Transpose:=False
DSTws.Activate
ActiveCell.Offset(0, -1) = objWorkbook.Name
ActiveCell.Offset(0, -2) = yLABEL
objWorkbook.Activate
y.Offset(0, 14).Copy
Set lastrow = Workbooks("clerkplan2.xlsm").Worksheets("transfer").Range("d" & DSTws.Rows.Count).End(xlUp).Offset(1, 0)
lastrow.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=True, Transpose:=False
objWorkbook.Activate
y.Offset(0, 15).Copy
Set lastrow = Workbooks("clerkplan2.xlsm").Worksheets("transfer").Range("e" & DSTws.Rows.Count).End(xlUp).Offset(1, 0)
lastrow.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=True, Transpose:=False
yNEXT:
Next y
xNEXT:
Next x
zNEXT:
Next z
strPathused = "C:\clerk plan2\used\" & objWorkbook.Name
objWorkbook.Close False
'Move proccesed file to new Dir
Dim OldFilePath As String
Dim NewFilePath As String
OldFilePath = objfile 'original file location
NewFilePath = strPathused ' new file location
Name OldFilePath As NewFilePath ' move the file
End If
Next
End Sub
답장을 보내 주셔서 감사합니다. 귀하의 제안을 기다리고 있습니다. 그 가장 가능성이 두꺼운 머리지만 나는 하나의 루프로 두 변수를 설정할 수있는 방법을보고 싶지 않아. 답장을 보내 주셔서 다시 한 번 감사드립니다. 귀하의 제안을 계속해서 지키고 빛이 비치는 지 확인하십시오. – PCGIZMO
나는 당신이 지금 무엇을 더 분명하게 말하고 있는지 보았습니다.모든'Z'에 대해 매번'For each X ... '에서'srcRange2'의 시작 부분에서 코드가 시작됩니다. X가 마지막 Z 루프에서 중단 한 X에서 X를 시작하게하려면 어떻게 든 추적해야합니다. 아마도 변수에 사용 된 마지막 X 행을 넣은 다음'Cells' 메서드를 사용하여'X '에'srcRange2.Cells (myRow, 1)의 각 X에 대해 '와 같이 어디에서 시작 할지를 알릴 수 있습니다. –
Scott thanks again I 지금 당장 그걸로 놀고있어. 작동하면 게시 할거야. 그렇지 않으면 노트북 화면을 교체해야 할 수도 있습니다. – PCGIZMO