Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 - Fatal编程技术网

VBA无法对表列进行计算

VBA无法对表列进行计算,vba,Vba,当我运行这个宏时,我没有得到任何错误。但是,这个宏没有给出答案,D列中没有任何内容 我想把A列和B列的加法放到D列中 ![这是我的表,我想将A列和B列添加到D列中。但当我运行宏时,什么也得不到。] 我怀疑以下几行给我带来了麻烦: Sub AddNumbersOnOneRow Const s_Field_ColA = "ColumnA" Const s_Field_ColB = "ColumnB" Const s_Field_ColC = "ColumnC" Const s_Fie

当我运行这个宏时,我没有得到任何错误。但是,这个宏没有给出答案,D列中没有任何内容

我想把A列和B列的加法放到D列中 ![这是我的表,我想将A列和B列添加到D列中。但当我运行宏时,什么也得不到。]

我怀疑以下几行给我带来了麻烦:

Sub AddNumbersOnOneRow
  Const s_Field_ColA = "ColumnA"
  Const s_Field_ColB = "ColumnB"
  Const s_Field_ColC = "ColumnC"
  Const s_Field_ColD = "ColumnD"


  Dim iPsDepth As Integer
  Dim iPsColA As Integer
  Dim iPsColB As Integer
  Dim iPsColC As Integer
  Dim iPsColD As Integer

  Dim lRow As Long
  Dim dDepth As Double
  Dim ColumnD As Double
  '------------------------
  'Determine the field positions of the necessary fields in the array.

  If InitFieldsFnB(gs_Depth, iPsDepth, _
                   s_Field_ColA, iPsColA, _
                   s_Field_ColB, iPsColB, _
                   s_Field_ColC, iPsColC) _
  Then
    'One or more of the required fields missing from the table.
    Exit Sub
  End If

  With gINTRules.GridData 

    iPsDepth = .FieldCol("Depth")
    iPsColA = .FieldCol("ColumnA")
    iPsColB = .FieldCol("ColumnB")
    iPsColC = .FieldCol("ColumnC")
    iPsColD = .FieldCol("ColumnD")


    For lRow = 1 To glNumRows
      ColumnD= CDbl(gsDataA(iPsColA, lRow))+ CDbl(gsDataA(iPsColB, lRow))

      gsDataA(iPsColD, lRow)= CStr(ColumnD)

    Next lRow
  End With

End Sub
非常感谢您的帮助

我的主要职责是:

For lRow = 1 To glNumRows
      ColumnD= CDbl(gsDataA(iPsColA, lRow))+ CDbl(gsDataA(iPsColB, lRow))

      gsDataA(iPsColD, lRow)= CStr(ColumnD)

Next lRow

除非您在其他地方设置该值,否则在您发布的代码中不会为glNumRows赋值,因此它的默认值为0,这意味着您的循环根本没有运行

给glNumRows一个值,您应该会看到一些结果

根据您的最新问题:

变量glNumRows不在AddNumberSonneRow sub的范围内。作为测试,请尝试将此行放在AddNumberSonneRow sub的循环之前(我认为我的语法正确,我没有测试它):

再一次重申,glNumRows不是在AddNumbersOnOnOneRow sub中定义的。您可以将其添加为参数或在sub中设置它,或者如果您非常喜欢冒险,甚至可以将其设置为全局变量


如果您不想在上面添加我的代码作为测试,还可以在初始化循环的行上设置断点,检查glNumRows的值,并报告VBA所说的值…我猜它会告诉您它是0

我把glNumRows放在主循环中,但循环仍然不是running@user2634156你能编辑你的原始文章,包括你的更新代码吗?这是一个熊,试图把它的正面或反面作为一个无格式的评论块。谢谢。我在代码中添加了这一点,我可以使用“MsgBox”打印出答案。然而,由于某种原因,这个答案并没有出现在我的表中。我试图通过这一行将答案写到表中:gsDataA(ipscoll,lRow)=CStr(ColumnD),但似乎没有work@user2634156等等…你确定这是VBA而不是VB或VB.net吗?这是一个访问应用程序吗?
'#LibInclude "common procedures"

Option Explicit
Public Sub Main
  Dim gsDataA As Variant
  Dim glNumRows As Integer
  With gINTRules.GridData
    'Put the grid data into a working string data array.
    gsDataA = .DataArray
    glNumRows = UBound(gsDataA, 2)

    'Put the modified data array back into the input grid.
    .DataArray = gsDataA
    'Success is True if there were no errors.
    gINTRules.Success = CBool(.ErrorCol = 0)
  End With
End Sub
glNumRows = UBound(gINTRules.GridData.DataArray, 2)