Vba不要改变变量值

时间:2016-12-06 14:15:34

标签: excel vba excel-vba

我对VBA有疑问。如果找到并且空值,我的脚本应该通过表格停止。所以我的代码有2个问题:

Sub BudgetKontoRechnen()
Dim row As Long, column As String, locSum As Double, sumRow As Integer

row = 4
column = "A"

Do
    ' Point 1
    If Len(Range(column & row).Value) = 0 Then
        Exit Do
    End If
    Set sumCell = Range(column & row).Offset(0, 1)
    sumRow = 0
    locSum = 0

    Do
        sumRow = sumRow + 1
        If Len(sumCell.Offset(sumRow, 0).Value) = 0 Then
            Exit Do
        End If
        locSum = locSum + CDbl(sumCell.Offset(sumRow, 0).Value)
    Loop

    nextCol = Split(Range(column & row).Offset(0, 2).Address, "$")
    column = nextCol(1)
    ' Point 2
    sumCell.Value = locSum
Loop

End Sub

我为方向添加了一些要点:

在第1点,列总是“A”。 在第2点它应该将列更改为第二个下一列,所以当此时检查列时,表示C.但是在下一个循环中它又是A.我不知道为什么......

第二:我添加的每个代码在最后一行(sumCell.Value = locSum)之后不执行。任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:0)

您组织代码的方式很奇怪。我建议您使用Cells()代替Range()来访问您的数据,并在Do行中移动继续测试,而不是稍后使用{{ 1}}。

Exit Do

我还将测试从Sub BudgetKontoRechnen() Dim row As Long, column As Long Dim sumCell As Range Dim locSum As Double, sumRow As Long row = 4 column = 1 Do While Cells(row, column).Text <> "" ' Point 1 Set sumCell = Cells(row, column + 1) sumRow = 1 locSum = 0 Do While sumCell.Offset(sumRow, 0).Text <> "" locSum = locSum + CDbl(sumCell.Offset(sumRow, 0).value) sumRow = sumRow + 1 Loop ' Point 2 sumCell.value = locSum column = column + 2 Loop End Sub 更改为.Value支票,不确定是否更好。

请注意,代码与ActiveSheet交互,您可能希望明确使用哪个工作表。

答案 1 :(得分:0)

您的代码可简化为以下内容:

Sub BudgetKontoRechnen()
    Dim iCol As Long

    With Range("A4", Cells(4, Columns.count).End(xlToLeft))
        For iCol = 1 To .Columns.count Step 2
            If WorksheetFunction.Trim(.Cells(1, iCol).Text) <> vbNullString Then
                With .Cells(1, iCol + 1)
                    .Value = WorksheetFunction.Sum(Application.Transpose(.Parent.Range(.Offset(1), .Offset(1).End(xlDown)).Value))
                End With
            End If
        Next iCol
    End With
End Sub