Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我正在尝试对多列执行计算,并将值分配给一列_Vba_Excel - Fatal编程技术网

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生成相关的操作,例如,通过编程调用处理按钮单击事件的同一个子节点。但是,如果您遇到困难,您应该发布一个新问题,其中包含所有细节和代码。