如果表单中有1个数据行,Sumexpression式不会显示总和

对不起,如果标题混乱。

我有多个工作表,下面的代码将遍历每个工作表,计算持续时间/成本,然后input剩余的值。 它很好,但是有一个问题。

问题:如果标题下只有一行数据,它将不会显示插入总持续时间和成本的总持续时间和成本。

确切的问题示例:

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 

问题是End(xlDown) ,当你使用它对B2E2

由于只有一行, 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") 

或者,如果您知道至less有一行数据,则可以将原始代码中的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