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
你能更具體地瞭解你的問題嗎?因爲在你的代碼中,你每次只刪除第一列而沒有測試或循環,所以我不明白那是行不通的... – R3uK
這就是我爲什麼如此困惑並尋求幫助的原因,我不知道不明白它怎麼也行不通!有什麼你可以看到我的代碼可能會影響「刪除」命令? – Meringue90
除了缺少引用(Workbook.sheet.range)之外,沒有...可能是因爲您在複製工作表後才能在新的工作簿中工作,所以您需要指定在哪個工作簿中進行操作。 – R3uK