很抱歉,如果标题令人困惑。
我有多张纸,下面的代码将遍历每张纸,计算持续时间/费用&然后输入剩余值。它很有效,但是有一个问题。
问题:如果标题下只有1行数据,则不会显示总持续时间&插入总成本和成本的成本成本。
确切问题示例:
Start Time Duration Calling Name Dialed Number Cost
6/2/2016 8:58 0:01:15 BLANK_F333 1303900000 $0.12
Total Duration: Total Cost:
以下是有多行数据的确切示例。
Start Time Duration Calling Name Dialed Number Cost
6/1/2016 15:07 0:30:55 BLANK_I380 6052340000 $3.72
6/3/2016 12:26 0:05:40 BLANK_I380 1605230000 $0.72
6/6/2016 13:49 0:00:08 BLANK_I380 1605380000 $0.12
6/6/2016 13:50 0:00:08 BLANK_I380 1605380000 $0.12
6/6/2016 13:51 0:01:15 BLANK_I380 1605320000 $0.12
6/16/2016 8:29 0:01:42 BLANK_I380 1703290000 $5.04
Total Duration: 0:39:48 Total Cost: $9.84
我无法弄清楚如何输出单行数据表。
代码
Sub FormatEntry()
Dim TotalCost As Double
Dim TotalTime As Double
Dim LastRow As Long
For Each ws In ActiveWorkbook.Worksheets
On Error Resume Next 'Will continue if an error results
With ws
.Range("E:E").NumberFormat = "_-[$$-40B]* #,##0.00_ ;_-[$$-40B]* -#,##0.00 ;_-[$$-40B]* ""-""??_ ;_-@_ "
.Range("E2").End(xlDown).Offset(1, 0).Value = _
WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row))
.Range("B2").End(xlDown).Offset(1, 0).Value = _
Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss")
.Range("A1").End(xlDown).Offset(1).Font.Bold = True
.Range("A1").End(xlDown).Offset(1).Value = "Total Duration:"
.Range("D1").End(xlDown).Offset(1).Font.Bold = True
.Range("D1").End(xlDown).Offset(1).Value = "Total Cost:"
.Range("B" & Rows.Count).End(xlUp).Row = LastRow
End With
Next ws
End Sub
答案 0 :(得分:2)
问题是End(xlDown)
以及当您对B2
和E2
使用它时
因为只有一行,End(xlDown)
方法将转到电子表格的最后一行。 看那里,你会看到公式:)
请改用:
.Range("E" & .Rows.Count).End(xlUp).Offset(1, 0).Value = _
WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row))
.Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Value = _
Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss")
或者,如果您知道总是 至少一行数据,则可以将原始代码中的2行引用更改为1.
.Range("E1").End(xlDown).Offset(1, 0).Value = _
WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row))
.Range("B1").End(xlDown).Offset(1, 0).Value = _
Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss")
作为旁注,这条线没有任何意义:
.Range("B" & Rows.Count).End(xlUp).Row = LastRow