2014-09-04 75 views
0

因此,我試圖在Excel中創建一種日常食物日記,我知道我想要它做什麼,我只是在努力實現所述想法...
我已經創建一個我希望用戶每天進入的模板,但我不希望用戶每天都必須創建一個新的工作表才能實現此目的,我想創建一個在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

*想出錯誤。*哪些錯誤以及哪些行? – 2014-09-04 14:54:50

+1

'With ThisWorkbook'然後'.Range(...'是一個錯誤,因爲你沒有合格*工作表*。範圍屬於表單,而不是工作簿:) – 2014-09-04 14:55:22

+0

@DavidZemens好的,我已經改變{ThisWorbook }到{ActiveSheet},現在它正在工作,但較舊的工作表的日期不會保持原樣,它會更改爲今天的日期...任何想法? – MrPhooky 2014-09-04 15:10:24

回答

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 2014-09-04 15:41:17

+0

'工作表().Visible = xlSheetVisible'或'= -1'或'= True'應該工作:) – 2014-09-04 16:00:18