2014-09-04 2 views
0

Excel에서 일일 음식 일기를 만들고 싶습니다. 제가하고 싶은 것을 알고 있습니다. 아이디어를 구현하는 데 어려움을 겪고 있습니다 ...
작성했습니다. 사용자가 매일 입력해야하는 템플릿을 만들었지 만 사용자가 매일 새 워크 시트를 만들어야하는 것은 아니므로 Excel이 열리면 실행할 매크로를 만들고 싶습니다. 마지막 입력 시트가 채워진 날짜를 확인하고, 현재 날짜보다 작 으면 새 워크 시트를 만들고 채울 시트를 표시하십시오!엑셀 매크로, 매일 새 시트 추가

여기에 내가 지금까지 발견했지만 시도했지만 아무것도하지 않고 오류가 떠오르고 있습니다.

Private Sub Workbook_Open() 
Dim sh As Worksheet 
Dim shName As String 

'name of the sheet template 
shName = "Food Diary.xltm" 

'Insert sheet template 
With ThisWorkbook 
    If .Range("A1") < Date Then 
     .Range("A1") = Date 
     Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ 
          after:=.Sheets(.Sheets.Count)) 
     'Give the sheet a name, today's date in this example 
     On Error Resume Next 
     sh.Name = "Day" & " " & Worksheets.Count 
     If Err.Number > 0 Then 
      MsgBox "Change the name of Sheet : " & sh.Name & " manually" 
      Err.Clear 
     End If 
     On Error GoTo 0 
    End If 
    End With 

End Sub 

바라건대 내가 알기를 바란다.
오늘 날짜가 시트의 최신 날짜보다 큰 경우 일 [시트 수]라는 새 이름을 만드십시오. 날짜가 "A1"에 입력되고 하루가 지나듯이 날짜 일은 확실하지 않습니다. 통합 문서가 열릴 때 업데이트되지 않습니까?

나는 새로운 시트가 만들어지면 시트를 숨기는 것 같았습니다. 이것은 아주 좋을 것이고, 현재의 시트 만 보여주는 것이 좋겠지 만 다른 것들은 여전히 ​​있어야합니다. 각 프레스 후에 각각을 스크롤 할 수있는 유사한 버튼을 통해 액세스 할 수 있어야합니다. 버튼 코딩을 수행 할 수있을 것이라고 생각하지만 시트의 가시성에 대해서는 확신 할 수 없으며 한 번 숨겨진 광고를 숨기기 해제 할 수 있는지 여부는 알 수 없습니다. 이것으로도 도움이 될 것입니다.

+0

* 오류가 발생하며 어떤 줄이 있습니까? –

+1

'With ThisWorkbook' 그리고'.Range (...'는 워크 시트 *를 수식하지 않았기 때문에 오류입니다.) 범위는 통합 문서가 아닌 시트에 속해 있습니다 : –

+0

@DavidZemens 좋아,이 변경되었습니다 {ThisWorbook }에서 {ActiveSheet}로 이동했지만 현재 작동하지만 이전 워크 시트의 날짜가 그대로 유지되지 않고 오늘 날짜로 변경됩니다. 어떤 아이디어입니까? – MrPhooky

답변

1

새 시트를 추가하기 전에 A1에 할당하는 중입니다. 따라서 작성하려는 시트가 아닌 ActiveSheet에 글을 씁니다 (아직 작성되지 않았습니다!).

정확하게 이해하면 다음과 같이됩니다. 활성 시트 범위 A1을 쿼리하고 오늘 날짜와 비교하여 새 시트를 추가하거나 이전 시트를 숨겨야합니다.

Private Sub Workbook_Open() 
Dim thisSheet as Sheet 
Dim sh As Worksheet 
Dim shName As String 

'name of the sheet template 
shName = "Food Diary.xltm" 

'#### I like to use variables for worksheets: 
Set thisSheet = ThisWorkbook.ActiveSheet 

'Insert sheet template 
With thisSheet 
    If .Range("A1") < Date Then 
     Set sh = Sheets.Add(Type:=Application.TemplatesPath & shName, _ 
          after:=.Sheets(.Sheets.Count)) 
     '#### Put today's date in the new sheet: 
     sh.Range("A1") = Date 

     'Give the sheet a name, today's date in this example 
     On Error Resume Next 
     sh.Name = "Day " & Worksheets.Count 
     If Err.Number > 0 Then 
      MsgBox "Change the name of Sheet : " & sh.Name & " manually" 
      Err.Clear 
     End If 
     On Error GoTo 0 

     '#### Hide the old sheet 
     .Visible = xlSheetHidden 

    End If 
End With 

End Sub 
+0

정말 고마워, 또 하나의 빠른 질문, 어떻게 숨김을 풀겠습니까? VBA 코드를 사용하면 과 같은 것일 수 있습니다 .Visible = True? – MrPhooky

+0

'Worksheets () .Visible = xlSheetVisible' 또는'= -1' 또는'= True' 중 하나를 사용해야합니다 :) –