2015-05-15 63 views
0

我很抱歉,如果我不正確地發佈此問題,我仍然習慣於StackExchange網絡。刪除列使用日期函數

我創建了用戶表單來複制模板工作簿,填寫所選月份和年份的日期,然後刪除額外的列,因爲模板工作簿具有31個預格式化的列。

我遇到的問題是,當我單擊用戶表單中的「Enter」按鈕時,工作簿會複製並保存,並將日期放在頂部,但是,它不會完全執行「刪除「在」重複表格「下面。對於工作簿中的每張工作日(日常銷售,庫存總計,交貨,收入報表,利潤),如果它將頂部日期放入日期,則應刪除大於「天」且小於31列的額外列在該月的第一個日期之後。

Option Explicit 
Private Sub UserForm_Initialize() 
InitializeMonthsCombo 
InitializeYearsCombo 
End Sub 
Private Sub InitializeMonthsCombo() 
Dim months() As String 
months = Split("January,February,March,April,May,June,July,August,_ 
September,October,November,December", ",") 

Dim i As Integer 
For i = LBound(months) To UBound(months) 
    Me.CmboMonth.AddItem months(i) 
Next 
End Sub 
Private Sub InitializeYearsCombo() 

Const startYear As Integer = 2015 
Const endYear As Integer = 2035 

Dim i As Integer 
For i = startYear To endYear 
    Me.CmboYear.AddItem i 
Next 
End Sub 
Private Sub CmdEnter_Click() 
Dim Days As Integer 
Dim StartDate As Date 

    StartDate = CDate("1-" & CmboMonth.Value & "-" & CmboYear.Value) 
    Days = (DateDiff("d", StartDate, DateAdd("m", 1, StartDate))) - 1 

'Duplicate Sheet 
Sheets(Array("Daily Sales", "Total Inventory", "Deliveries", "Income 
Statement", "Profits")).Copy 


     'Daily Sales 
     Dim DailySales As Worksheet 
     Set DailySales = Worksheets("Daily Sales") 

     Populate DailySales, DailySales.Range("B6"), 
     DailySales.Range(DailySales.Cells(6, 2), DailySales.Cells(6, 2 + 
      Days)) 
     Range(Cells(1, 3 + Days), Cells(1, 32)).EntireColumn.Delete 

     'Total Inventory 
     Dim TotalInventory As Worksheet 
     Set TotalInventory = Worksheets("Total Inventory") 

     Populate TotalInventory, TotalInventory.Range("C5"), 
     TotalInventory.Range(TotalInventory.Cells(5, 3), 
     TotalInventory.Cells(5, 3 + Days)) 
     Populate TotalInventory, TotalInventory.Range("C5"), 
     TotalInventory.Range(TotalInventory.Cells(5, 3), 
     TotalInventory.Cells(5, 2)) 
     Range(Cells(1, 4 + Days), Cells(1, 33)).EntireColumn.Delete 

     'Deliveries 
     Dim Deliveries As Worksheet 
     Set Deliveries = Worksheets("Deliveries") 

     Populate Deliveries, Deliveries.Range("B6"), 
     Deliveries.Range(Deliveries.Cells(6, 2), Deliveries.Cells(6, 2 + 
       Days)) 
     Range(Cells(1, 3 + Days), Cells(1, 32)).EntireColumn.Delete 

     'Income Statement 
     Dim IncomeStatement As Worksheet 
     Set IncomeStatement = Worksheets("Income Statement") 

     Populate IncomeStatement, IncomeStatement.Range("C4"), 
      IncomeStatement.Range(IncomeStatement.Cells(4, 3), 
      IncomeStatement.Cells(4, 3 + Days)) 
     Range(Cells(1, 4 + Days), Cells(1, 33)).EntireColumn.Delete 

     'Profits 
     Dim Profits As Worksheet 
     Set Profits = Worksheets("Profits") 

     Populate Profits, Profits.Range("E4"), 
      Profits.Range(Profits.Cells(4, 5), Profits.Cells(4, 5 + Days)) 
     Range(Cells(1, 6 + Days), Cells(1, 35)).EntireColumn.Delete 
    End Sub 
Public Sub Populate(DestSheet As Worksheet, first As Range, dest As 
Range) 
    Dim StartDate As Date 
    StartDate = CDate("1-" & CmboMonth.Value & "-" & CmboYear.Value) 

    first.Value = StartDate 
    first.AutoFill Destination:=dest, Type:=xlFillValues 

    DestSheet.Cells.EntireColumn.AutoFit 

'Close Userform 
Unload Me 

End Sub 

Private Sub CmdCancel_Click() 
'Close Userform 
Unload Me 
End Sub 
+0

你能更具體地瞭解你的問題嗎?因爲在你的代碼中,你每次只刪除第一列而沒有測試或循環,所以我不明白那是行不通的... – R3uK

+0

這就是我爲什麼如此困惑並尋求幫助的原因,我不知道不明白它怎麼也行不通!有什麼你可以看到我的代碼可能會影響「刪除」命令? – Meringue90

+0

除了缺少引用(Workbook.sheet.range)之外,沒有...可能是因爲您在複製工作表後才能在新的工作簿中工作,所以您需要指定在哪個工作簿中進行操作。 – R3uK

回答

0

我解決了這個問題!問題是,當我去刪除每張表中的列時,我並沒有改變對該表的引用,因此它刪除了活動表中的第一個表單「Daily Sales」,這是五次,而不是更換工作表。我需要澄清範圍表。

Range(Cells(1, 3 + Days), Cells(1, 32)).EntireColumn.Delete 

變爲:

Range(Deliveries.Cells(1,3+Days), Deliveries.Cells(1,32))_ 
.EntireColumn.Delete 

這是我覺得什麼R3uK想告訴我,但我不明白。謝謝R3uK!