0
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

当我运行这个宏时,我没有收到任何错误。但是,这个宏没有给我答案,D列中什么也没有。

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

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

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

      gsDataA(iPsColD, lRow)= CStr(ColumnD)

Next lRow

任何帮助是极大的赞赏!!!

我的主要子是:

'#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
4

1 回答 1

0

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

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

根据您更新的问题:

变量 glNumRows 不在您的 AddNumbersOnOneRow 子范围内。就像测试一样,尝试将此行放在 AddNumbersOnOneRow 子中的该循环之前(我认为我的语法正确,我还没有测试过):

glNumRows = UBound(gINTRules.GridData.DataArray, 2)

再次重申……glNumRows 没有在您的 AddNUMbersOnOneRow 子中定义。您可以将其添加为参数或将其设置在子程序中,或者如果您真的喜欢冒险,甚至可以将其设置为全局变量。

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

于 2013-08-01T16:23:31.447 回答