2017-11-20 10 views
0

다음 VBA 코드는 workbook1 파일을 저장하는 폴더에 workbook1 시트를 저장합니다. 예 : workbook1에는 31 개의 시트가 있습니다. 이 코드는 각 시트를 시트와 같은 이름의 새 통합 문서에 저장합니다. (Sheet1, Sheet2 등).VBA Excel 매크로 날짜가 포함 된 셀의 일부로 저장

Sub SaveShtsAsBook() 
Dim Sheet As Worksheet, SheetName$, MyFilePath$, N& 
MyFilePath$ = ActiveWorkbook.Path & "\" & _ 
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) 
With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    '  End With 
    On Error Resume Next '<< a folder exists 
    MkDir MyFilePath '<< create a folder 
    For N = 1 To Sheets.Count 
     Sheets(N).Activate 
     SheetName = ActiveSheet.Name 
     Cells.Copy 
     Workbooks.Add (xlWBATWorksheet) 
     With ActiveWorkbook 
      With .ActiveSheet 
       .Paste 
       .Name = SheetName 
       [A1].Select 
      End With 
      'save book in this folder 
      .SaveAs Filename:=MyFilePath _ 
      & "\" & SheetName & ".xls" 
      .Close SaveChanges:=True 
     End With 
     .CutCopyMode = False 
    Next 
End With 
Sheet1.Activate 
End Sub 

ID와 날짜가 포함 된 파일을 저장하려면 코드를 수정해야합니다. ID는 A1 셀에 있습니다. "Doe, John (JDOE)에 대한 XXX 클리닉 프로 수수료 보고서" 이 예제에서는 JDOE_2017-10-20으로 저장하기 위해 새 통합 문서가 필요합니다.

ID를 부여하고 날짜를 기입하는 방법이 있습니까?

+0

1. 시도, 당신은 (새와 끝까지 활성) 통합 문서를 워크 시트의 유일한 사본으로 사용하십시오. 2. VBA, 워크 시트 함수 또는 정규 표현식을 사용하여 A1의 문자열에서 JDOE를 추출하고 현재 날짜를 추가하는 것은 간단한 문제입니다. 하위 문자열 추출의 어떤 부분에서 문제가 있습니까? – Jeeped

+0

btw가 기본 설정입니다. * 파일을 다음 형식으로 저장하십시오. * ** 정말로 ** .XLS? – Jeeped

+0

1. 이것은 정확합니다. – cmpmd2

답변

0

는 아래의 코드

Sub SaveShtsAsBook() 
Dim ldate As String 
Dim SheetName1 As String 


ldate = Format(Now(), "yyyy-mm-dd") 
Dim Sheet As Worksheet, SheetName$, MyFilePath$, N& 
MyFilePath$ = ActiveWorkbook.Path & "\" & _ 
Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) 
With Application 
    .ScreenUpdating = False 
    .DisplayAlerts = False 
    '  End With 
    On Error Resume Next '<< a folder exists 
    MkDir MyFilePath '<< create a folder 
    For N = 1 To Sheets.Count 
     Sheets(N).Activate 
     SheetName = ActiveSheet.Name 
     Cells.Copy 
     SheetName1 = Range(A1).Value2 & ldate 
     Workbooks.Add (xlWBATWorksheet) 

     With ActiveWorkbook 
      With .ActiveSheet 
       .Paste 
       .Name = SheetName 
       [A1].Select 
      End With 
      tempstr = Cells(1, 1).Value2 
      openingParen = InStr(tempstr, "(") 
      closingParen = InStr(tempstr, ")") 
      SheetName1 = Mid(tempstr, openingParen + 1, closingParen - openingParen - 1) & "_" & ldate 
      'save book in this folder 
      .SaveAs Filename:=MyFilePath _ 
      & "\" & SheetName1 & ".xls" 
      .Close SaveChanges:=True 
     End With 
     .CutCopyMode = False 
    Next 
End With 
Sheet1.Activate 
End Sub 
+0

코드가 새 통합 문서를 "JDOE_2017_11_20"으로 저장하지 않습니다. – cmpmd2

+0

무엇으로 저장하나요? 이상적으로는 해당 시트의 A1에서 괄호 안의 값을 추출합니다. –

0

대괄호에서 이름 코드를 추출하고 몇 줄의 코드로 날짜를 추가 할 수 있습니다. 당신이 어떤 목적지에 워크 시트를 복사하는 경우 등 몇 가지 다른 수정과 함께

SheetName = Split(Split(.Cells(1, 1).Value2, "(")(1), ")")(0) 
    SheetName = sn & Format(Date, "_yyyy-mm-dd") 

,

Option Explicit 

Sub SaveShtsAsBook() 
    Dim ws As Worksheet, sn As String, mfp As String, n As Long 

    With Application 
     .ScreenUpdating = False 
     .DisplayAlerts = False 
    End With 

    On Error Resume Next '<< a folder exists 
    mfp = ActiveWorkbook.Path & "\" & Split(ThisWorkbook.Name, Chr(46))(0) 
    MkDir mfp '<< create a folder 
    On Error GoTo 0 '<< resume default error handling 

    With ActiveWorkbook 
     For n = 1 To .Worksheets.Count 
      With .Worksheets(n) 
       sn = Split(Split(.Cells(1, 1).Value2, "(")(1), ")")(0) 
       sn = sn & Format(Date, "_yyyy-mm-dd") 
       .Copy 
       With ActiveWorkbook 
        'save book in this folder 
        .SaveAs Filename:=mfp & "\" & sn, FileFormat:=xlExcel8 
        .Close SaveChanges:=False 
       End With 
      End With 
     Next 
    End With 

    With Application 
     .ScreenUpdating = True 
     .DisplayAlerts = True 
    End With 
End Sub 
+0

코드가 sn = Split (Split (.Cells (1, 1) .Value2, "("(1), ")") (0)에서 중지되었습니다. 다른 진술이 있습니까? 분할 기능에 익숙하지 않습니다. – cmpmd2

+0

당신은 모든 사람들이 * 'Doe, John (JDOE)'에 대한 * '엑스 클리닉 프로 비용 보고서'*가 수출 될 각 워크 시트의 A1 셀에 있다고 믿게 만들었다 고 생각합니다. btw, VBA Split 기능에 대한 도움말은 msdn.microsoft.com에서 제공됩니다. – Jeeped

+0

'.'을 놓친 것 같습니다 (위 편집 참조). 또한 ThisWorkbook 및 ActiveWorkbook에 대해 확인해야 할 약간의 혼란이있었습니다. – Jeeped