2017-07-20 6 views
0

Je suis nouveau avec MS EXCEL VBA mais je lis encore un peu de blog sur VBA et comment cela fonctionne. J'ai eu l'idée de renommer la feuille Excel, de désactiver les lignes et d'ajouter de nouvelles feuilles. Mais je veux savoir
comment insérer automatiquement la ligne tous les jours, ajouter une nouvelle feuille tous les mois, et créer un nouveau même cahier (structure par défaut) chaque année ajouter dans MS EXCEL 2013? Comment je fais ça?Classeur généré automatiquement à l'aide de la date, du mois et de l'année en cours

Date aujourd'hui est 1 alors demain excel ajouter automatiquement 1 ligne pour la date. Si le mois de janvier se termine alors excelle automatiquement ajouter une nouvelle feuille pour février. Et les changements d'année excel génèrent le même classeur par défaut ou vide avec l'année en cours.

La structure par défaut du Excel, le fichier Excel sont situés à https://github.com/Ailyn09/project102/blob/master/2017.xlsx

CODE COURANT

Sub Sample() 
     'Disable adding row 

     Dim I As Integer 
     Dim cbStr As String 
     Dim cbCtrl As CommandBarControl 
     Application.ScreenUpdating = False 
     For I = 1 To 2 
      If I = 1 Then 
       cbStr = "row" 
      Else 
       cbStr = "column" 
      End If 
      For Each cbCtrl In Application.CommandBars(cbStr).Controls 
       If cbCtrl.ID = 3183 Then 
        cbCtrl.Enabled = False 
       End If 
      Next 
     Next 
     Application.ScreenUpdating = True 

     'Copy Existing Sheet And Month As Name 
     ActiveSheet.Copy , Sheets(Sheets.Count) 
     ActiveSheet.Name = Month() 
    End Sub 

une idée pour FICHE CHAQUE MOIS ICI: https://excel.tips.net/T002017_Sheets_for_Months.html

+0

est-il par défaut structure ce que vous avez montré sur la feuille de janvier? c'est-à-dire 5 lignes pour les données d'une date et insérer 5 autres lignes pour la date suivante et ainsi de suite? Vous devriez également avoir une colonne de date sur la feuille qui manque dans la mise en page actuelle. – sktneer

+0

que voulez-vous arriver si vous n'exécutez pas le code pendant quelques jours, puis exécutez le code? – jsotola

+0

@jsotola. Je veux que l'Excel ajoute une ligne automatiquement tous les jours. Et si le mois change, il va créer une nouvelle feuille et commencer au premier jour, mais la même formule avec la feuille de calcul par défaut. Et si l'année change, il faut créer un nouveau classeur avec le formulaire par défaut. par exemple (maintenant c'est 2017, le nom du classeur devrait 2017, et nous devrions avoir la feuille janvier jusqu'à juillet, alors juillet a 24 comme date.La date pour juillet est 1-31 alors la dernière date que nous devrions voir pour la feuille de juillet devrait être 1-31 la ligne SUM qui ajoute tout Et l'année prochaine 2018, il créera automatiquement un nouveau classeur 2018, puis commencera à Janvier – Ailyn

Répondre

0

voici un début ... juste essayer du code ... crée mois workshe et si elle n'existe pas ... ajoute ensuite les données à la feuille

je dois aller pour quelques jours ... viendra avec quelque chose de plus quand je reviens

Sub testDate() 

    Debug.Print Format(Now(), "d") 
    Debug.Print Format(Now(), "dd") 
    Debug.Print Format(Now(), "ddd") 
    Debug.Print Format(Now(), "m") 
    Debug.Print Format(Now(), "mm") 
    Debug.Print Format(Now(), "mmm") 
    Debug.Print Format(Now(), "mmmm") 
    Debug.Print Format(Now(), "yy") 
    Debug.Print Format(Now(), "yyyy") 

    Debug.Print Month(Now) 
    Debug.Print MonthName(Month(Now)) 

    Dim ws As Sheets 
    Set ws = ActiveWorkbook.Worksheets 

    Dim nam As String 
    nam = Format(Now(), "mmmm")      ' month name in local language 

    Dim sh As Worksheet 
    If Evaluate("ISREF('" & nam & "'!A1)") Then  ' sheet name exists ? 
     Set sh = ws(nam) 
    Else 
     Set sh = ws.Add(after:=ws(ws.Count)) 
     sh.Name = nam 
    End If 

' !!!!! use one of the sections below, but NOT both !!!!! 
' -------------------------------------------------------------------------------------- 
    Dim lastCell As Range 
    Set lastCell = sh.Range("A" & sh.Rows.Count).End(xlUp)     ' last used cell in column A 
    lastCell.Offset(1).Value = Format(Now(), "to\da\y i\s t\he dd of mmmm") ' some of the characters must be escaped 
' -------------------------------------------------------------------------------------- 
' this section corrupts the lastCell value that is used above 

' if fixed number of rows per day, then put daily data in particular rows 

' Dim day As Integer 
' day = Format(Now(), "d") 
' sh.Range("A1").Offset(day).Value = Format(Now(), "to\da\y i\s t\he dd of mmmm") 
' -------------------------------------------------------------------------------------- 

End Sub 
+0

Un bon code, mais il est possible que l'utilisateur duplique la date en utilisant votre code. – Ailyn