如果表格中有1个数据行,则总和表达式不显示总和

时间:2016-06-22 21:10:00

标签: excel vba excel-vba

很抱歉,如果标题令人困惑。

我有多张纸,下面的代码将遍历每张纸,计算持续时间/费用&然后输入剩余值。它很有效,但是有一个问题。

问题:如果标题下只有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

1 个答案:

答案 0 :(得分:2)

问题是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")

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