我对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)之后不执行。任何人都可以解释原因吗?
答案 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