2017-03-05 1 views
1

시트 이름에 "benefits"텍스트가있는 워크 시트가 포함될 통합 문서가 있습니다. 예를 들어; 의료 혜택 또는 치과 혜택. 적어도 하나는있을 것이지만 몇 가지가있을 수 있습니다. 나는 텍스트 시트 이름에 "혜택"AND 연속 TRUE 단어의 적어도 하나 개의 인스턴스 워크 시트 (들)을 발견 할 것이다 매크로를 작성하는 것을 시도하고있다새 워크 시트 만들기

(40)

이 두 가지 기준 그때 나는 같은 워크 시트 이름을 사용하지만 텍스트 "혜택"텍스트를 "최종"텍스트로 대체하여 새로운 워크 시트를 만들어야합니다. 40 행의 하나 이상의 셀에서 MEDICALBenefits 워크 시트가 TRUE이면 MEDICALFinal이라는 새 시트가 작성됩니다.

마찬가지로, DENTALBenefits 워크 시트가 40 행의 하나 이상의 셀에서 TRUE이면 DENTALFinal이라는 새 시트가 작성됩니다.

그런 다음 이름이 "Benefits"이고 40 행이 TRUE 인 모든 시트를 반복하고 새 시트를 작성해야합니다.

이것은 지금까지 가지고있는 코드이지만 새 시트의 이름을 지정하는 데 도움이 필요합니다.

요르단

'Look for worksheet names *benefits* with checkbox(s) = true 
Sub CreateFinalWorksheet() 
    Dim sh As Worksheet 
    Dim iVal As Integer 
    Application.ScreenUpdating = False 
    For Each sh In ActiveWorkbook.Sheets 
     iVal = Application.WorksheetFunction.CountIf(Range("40:40"), "TRUE") 
     If (LCase$(sh.Name) Like "*benefits*") And (iVal > 0) Then Call AddWorksheet 
    Next sh 
    Application.ScreenUpdating = True 
End Sub 


'Called from CreateFinalWorksheet. 
'Add worksheet with same sheet name replacing *benefits* with *final* 
Sub AddWorksheet() 
    Dim sh As Worksheet 
    With ThisWorkbook 
     Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
     ws.Name = "MedicalFinal" 
    End With 
End Sub 

답변

1

이 작전의 설명 후 그는 당신이 기록 할 수 있도록 다음과 같이 "* 혜택을"모두 찾을 시트

iVal = Application.WorksheetFunction.CountIf(Range("40:40"), "TRUE") 

에서 당신이 현재 sh 워크 시트 참조를 놓치고 싶어 편집 :

iVal = Application.WorksheetFunction.CountIf(sh.Range("40:40"), "TRUE") 

위의 내용과 주요 문제에 대해서는 다음을 참조하십시오.

+0

두 제안을 모두 시도했지만 두 시트 모두 MEDICALFinal을 새로 작성하지만 다음 시트를 반복하지 않습니다. DENTALBenefits 다음 새 시트 작성 치명상. 나는 하위를 호출 한 후 첫 번째 매크로로 돌아가 나머지 시트를 반복 할 것이라고 생각했습니다. 나는 VBA에 매우 익숙하며 필요한 수정을하는 방법을 모르고있다. – JordanCA57

+0

@ JordanCA57, 편집 된 답변 참조. 귀하의 질문을 해결하는 경우 답변 옆에있는 체크 표시를 클릭하여 회색으로 표시하고 채워 넣으십시오. 감사합니다. – user3598756

+0

그만큼의 점수를 변경해야합니다. 나는 그것을 이해한다. 나머지는 내가 가서 알아낼 것입니다. 이것은 학습에 정말로 도움이됩니다. – JordanCA57

0

당신은 또한 복사 등이 하위 내부에 다른 일을 할 수있는, 결국 워크 시트

If (LCase$(sh.Name) Like "*benefits*") And (iVal > 0) Then AddWorksheet sh 

Sub AddWorksheet(benef as worksheet) 
    .... 
    ws.name = Replace(benef.name, "benefits", "Final", , vbTextCompare) 

, 당신의 AddWorksheet 루틴에 매개 변수를 추가는 "혜택"하자 매개 변수 워크 시트의 일부 데이터 benef.

+0

MEDICALFinal이라는 새 시트를 만들지 만 다음 시트로 돌아 가지 않습니다. DENTALBenefits 다음 새 시트를 만듭니다. DENTALFinal. 나는 하위를 호출 한 후 첫 번째 매크로로 돌아가 나머지 시트를 반복 할 것이라고 생각했습니다. – JordanCA57

+0

@ JordanCA57 그렇습니다. 제가 보여준 것은 루틴을 수정하고 호출하는 것입니다. 또한 질문에 관련이없는 코드의 다른 문제를 수정하는 것을 고려하십시오. 범위를 한정하십시오. –

관련 문제