2011-07-26 3 views
0

..이 VB.net 코드를 최적화 할 수 있습니까? 더 나은 구현이 가능합니까? 날이 코드를 최적화 할 수 있도록하십시오

Public Sub createNextMonthSheets(ByRef io As InputOutput) 
    Dim WB As Excel.Workbook = getWorkBook(io.newClientReportHandle) 
    For Each name In clientSheetNames.FindAll(AddressOf findCurrMonthSheetNames) 
     For Each sheet In WB.Sheets 
      If (sheet.Name = name) Then 
       sheet.Name = name.Replace(currMonth, nextMonth) 
       sheet.Copy(After:=WB.Sheets(1)) 
      End If 
     Next sheet 
    Next name 
    WB.Close() 
End Sub 

Private Function findCurrMonthSheetNames(ByVal sheetName As String) As Boolean 
    If sheetName.Contains(" (" + currMonth + ")") Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 

나는 vb.net에 새로운 오전이 언어의 힘을 모른다.

실적을 최적화 할 수 있는지 확인하십시오.

동일한 작업을 수행하는 적은 수의 코드 줄에서 이것을 최적화 할 수 있는지 확인하십시오.

더 읽기 쉽게 만들 수있는 언어의 새로운면을 소개 할 수 있습니다!

findcurrmonthsheetnames 함수를 어떤 방식으로 오버로드하여 WB.sheets을 가져올 수 있습니까?

+0

이것은 매우 간단합니다. 메소드 이름에 케이스를 고정하고'WB' 변수를 낮추는 것 외에도 코드는 의미가 있으며 이미 꽤 작습니다. 성능 문제가있는 경우 통합 문서의 크기 나 복잡성 또는 Interop 코드 인 경우 Interop 서비스의 오버 헤드가 발생할 수 있습니다. –

+0

linq을 사용하여 더 좋은 방법으로 원하는 시트를 얻을 수 있습니까? –

+0

LINQ는 마법 해결 - 모든 기능을 제공하지 않습니다. 그것의 용도가 있지만 이것은 아마도 어떤 이익을 제공 할 수있는 것이 아닙니다. 당신이 가지고있는 것은 간단하고 논리적입니다. LINQ를 사용하기 위해 LINQ를 사용하는 것은 좋은 접근법이 아닙니다. –

답변

1

중첩 루프 질문에 대한 응답으로 필요한 모든 이름을 별도의 배열로 먼저 추출한 다음 각 기존 이름에 대해 배열을 검색 할 수 있습니다.

Public Sub createNextMonthSheets(ByRef io As InputOutput) 
    Dim WB As Excel.Workbook = getWorkBook(io.newClientReportHandle) 
    Dim CurrMonthSheetNames As String() = clientSheetNames.FindAll(AddressOf findCurrMonthSheetNames) 
    For Each sheet In WB.Sheets 
     Dim name As String = sheet.Name 
     If Array.Contains(CurrMonthSheetNames, name) Then 
      sheet.Name = name.Replace(currMonth, nextMonth) 
      sheet.Copy(After:=WB.Sheets(1)) 
     End If 
    Next sheet 
    WB.Close() 
End Sub 
+0

고마워 .. 정말 도움이 .. 내가 그걸 생각하지 않은 이유가 궁금 해서요! –

관련 문제