요구 사항 :! PID는 = LPID는, PID이라고하면 이제오류 : 필요한 개체 : '[정의] 사전 개체에 대한
PID Status LPID
10 Closed 25
11 Open 25
31 Open 31
25 Closed 25
54 Open 31
17 Open 17
20 Closed 31
88 closed 77
77 closed 77
101 Closed 66
102 closed 220
:이
다음 템플릿을 읽어 보시기 바랍니다 (부모 프로세스 ID)
업데이트 일부 항목은 101과 102라고 할 수 있습니다.이 항목은 하위 항목 인 CPID (하위 프로세스 ID)로 정의됩니다. , 그러나 그들의 부모는 그들 자신의 etires을 가지고 있지 않다. 따라서, 출력은 66 Parent
이고 220 Parent
은 출력되지 않아야한다.
이제 부모가 무엇인지 자녀에게 알려주는 코드를 찾고 있는데, 이는 다른 시트에서 그들을 표시하는 것을 의미합니다. 같은 행에 PPID가있는 모든 CPID를 나열하고 싶을 때도 있습니다. PPID에는 자식 프로세스가 있습니다. 출력은 다음과 같습니다.
PID Type Of Process? Child1 Child1 Child3 .... ChildN
10 Child
11 Child
31 Parent 54 20
25 Parent 10 11
54 Child
17 Parent
20 Child
88 Child
77 Parent 88
VBScript를 사용하여 코드를 작성했지만 실제 시트는 너무 느립니다. 2500 데이터의 경우 1 시간 정도가 걸렸습니다. 따라서 저는보다 빠른 프로세스를 원합니다.
몇 가지 요구 사항을 충족시키기 위해 아래 코드를 작성했습니다. 그러나 이해할 수없는 오류가 발생했습니다.
나를 도와 줄 수 있습니까? 나는 두 가지 방법으로 구문 Add
또는 =
을 시도했지만 아무런 도움이되지 않았습니다.
명시 적 옵션
Class cP
Public m_sRel
Public m_dicC
Private Sub Class_Initialize()
m_sRel = "Child"
Set m_dicC = CreateObject("Scripting.Dictionary")
End Sub
Public Function show()
show = m_sRel & " " & Join(m_dicC.Keys)
End Function
End Class
Dim objSheet1,objSheet2,TotalRows,TotalcolCopy,strPathExcel1
Dim oXls : Set oXls = CreateObject("Excel.Application")
Dim dicP : Set dicP = CreateObject("Scripting.Dictionary")
Dim nRow,nP
strPathExcel1 = "D:\Finalscripts\test.xlsx"
oXls.Workbooks.open strPathExcel1
'oXls.Workbooks.Open(oFs.GetAbsolutePathName("Test.xlsx"))
Set objSheet1 = oXls.ActiveWorkbook.Worksheets("A")
Set objSheet2 = oXls.ActiveWorkbook.Worksheets("B")
TotalRows=oXls.Application.WorksheetFunction.CountA(objSheet1.Columns(1)) - 3
TotalcolCopy=oXls.Application.WorksheetFunction.Match("ABC", objSheet1.Rows(3), 0)
objSheet1.Range(objSheet1.Cells(4,1),objSheet1.Cells(TotalRows,TotalcolCopy)).Copy(objSheet2.Range("A1"))
objSheet2.Range(objSheet2.Cells(1,2),objSheet2.Cells(TotalRows,TotalcolCopy-1)).Delete(-4159)
'Dim aData : aData=objSheet2.Cells.SpecialCells(12)'xlCellTypeVisible
TotalRows = oXls.Application.WorksheetFunction.CountA(objSheet2.Columns(1))
Dim aData : aData = objSheet2.Range("A1:B"&TotalRows)
'MsgBox(LBound(aData, 1)&"And"&UBound(aData, 1))
For nRow = LBound(aData, 1) To UBound(aData, 1)
Set dicP(aData(nRow, 1)) = New cP
Next
For nRow = LBound(aData, 1) To UBound(aData, 1)
If aData(nRow, 1) = aData(nRow, 2) Then
dicP(aData(nRow, 1)).m_sRel = "Parent"
Else
dicP(aData(nRow, 2)).m_dicC.Add aData(nRow, 1), 0 '(aData(nRow, 1)) = 0
End If
Next
objSheet2.Cells.ClearContents'To clear all the previous contenets of the sheet#2
nRow=1
For Each nP In dicP.Keys()
objSheet2.Cells(nRow,1).Value=nP
objSheet2.Cells(nRow,2).Value=dicP(nP).m_sRel
'WScript.Echo nP, dicP(nP).show()
nRow=nRow+1
Next
오류 : 필수 개체 : '[정의] dicP(aData(nRow, 2)).m_dicC.Add aData(nRow, 1), 0 '(aData(nRow, 1)) = 0
편집 라인에서 :는 자식 목록을 얻으려면, 내가 함께 아래의 코드를 작성 위 :
For Each nP In dicP.Keys()
objSheet2.Cells(nRow,1).Value=nP
objSheet2.Cells(nRow,2).Value=dicP(nP).m_sRel
objSheet2.Range("C"&nRow).Value=dicP(nP).m_dicC.Keys
'WScript.Echo nP, dicP(nP).show()
nRow=nRow+1
Next
원하는 출력이 나오지 않습니다. 이리?
코드가 개발 된 내 업데이트 된 설명을 참조하십시오. 당신이 혼란 스러울 때 나를 도와 주시오. –
하위 목록이 열에 있습니다. 설명에 표시되지 않았습니다. –
귀하의 응답이 내가 게시 한 모든 내용과 어떻게 관련이 있는지 알 수 없습니다. 내 대답을 읽었 니? –