Vba 我正在尝试对多列执行计算,并将值分配给一列
我正在尝试根据其他列的计算为列指定一个值。我希望它在所有行中循环并执行相同的计算。但什么也没发生Vba 我正在尝试对多列执行计算,并将值分配给一列,vba,excel,Vba,Excel,我正在尝试根据其他列的计算为列指定一个值。我希望它在所有行中循环并执行相同的计算。但什么也没发生 Sub calculateIncome() Dim i As Integer i = 2 Dim counter As Integer counter = 2 Dim j As Integer For j = 2 To i Worksheets("owssvr").Range("af" & j).Value = _ Worksheets("ow
Sub calculateIncome()
Dim i As Integer
i = 2
Dim counter As Integer
counter = 2
Dim j As Integer
For j = 2 To i
Worksheets("owssvr").Range("af" & j).Value = _
Worksheets("owssvr").Range("v" & j).Value + Worksheets("owssvr").Range("y" & _
j).Value + Worksheets("owssvr").Range("ab" & j).Value
j= j + 1
Next j
End Sub
您需要这样做:
Sub calculateIncome()
Dim startLine As Integer
Dim endLine As Integer
Dim currentLine As Integer
Dim ws As Worksheet
startLine = 2 ' you must preset
endLine = 126 ' you must preset
Set ws = Worksheets("owssvr")
For currentLine = startLine To endLine
ws.Range("af" & currentLine).Value = _
ws.Range("v" & currentLine).Value + _
ws.Range("y" & currentLine).Value + _
ws.Range("ab" & currentLine).Value
Next
End Sub
但是,呃,为什么不在单元格
AF2
中键入=V2+Y2+AB2
,然后将公式一直复制到列表下方?它不会循环,因为j“循环”从2到2。“什么都没发生”是什么意思?您自己采取了哪些步骤来查明发生了什么事?计数器
是不必要的。您将其初始化为2
,与j
循环的起始值相同,然后通过循环每次将其递增1,就像它自动发生在j
上一样。使用j
代替计数器
。不会解决问题,但会使代码更易于阅读。您应该逐行调试代码,以查看循环中的代码是否正在执行。而不仅仅是查看“AF”列以查看是否有输出。这将让您知道问题所在。将For…中的循环变量更改为循环是一种不好的做法-这已经是自动的:您不需要j=j+1
尽管我更喜欢您的代码版本,但它并不能真正解释OP的代码不更新单元格AF2的原因,所以我怀疑,无论是什么原因导致他们的代码不更新该单元格,也会导致您的代码不更新它。(但是,谁知道呢,也许如果他们只是使用你的代码,他们的问题就会消失——我总是怀疑那些看起来不像是从VBE复制的代码,比如OP的.value
[小写v
]和j=j+1
[缺少空格])@YowE3K,OP应该只更新第2行,因为for…循环设置为从2到i…的循环。。。这是2。这将是一个单循环。我怀疑OP说“什么都没发生”是因为他没有得到预期的完整迭代。不,如果你读了评论,即使单元格AF2没有更新——即使它进入了循环。所以我真的很困惑是什么导致了这个问题。(顺便说一句,我对value
中小写v
的担心似乎是没有根据的——这一点被编辑问题的人改变了。)@YowE3K,你说得对。很抱歉但后来他说你建议的测试奏效了——“哦,不,它有我输入的随机信息”——这让我,呃,重新获得了怀疑。无论如何,如果代码没有抛出异常,那么就没有任何东西阻止它工作。但是,我又一次想到,如果V2、Y2和AB2是空/空字符串,那么结果将与OP所描述的完全相同。如果没有工作簿,我无法进一步推测。@Richmond,至于PDF自动化,算法将与此类似,但不是设置单元格的值,您将执行与pdf生成相关的操作,例如,通过编程调用处理按钮单击事件的同一个子节点。但是,如果您遇到困难,您应该发布一个新问题,其中包含所有细节和代码。