gpt4 book ai didi

vba - 将函数输出分配给变量 Excel VBA 时出错

转载 作者:行者123 更新时间:2023-12-03 02:09:42 25 4
gpt4 key购买 nike

我正在使用从 Microsoft 复制的函数,该函数采用列号并重新分配列字母。我需要这样做来创建一个公式。我研究了一整天,但无法查明错误的原因(我也尝试将其作为子过程来完成)。该功能位于其自己的模块中。我测试了一下,效果很好:

Function ConvertToLetter(ByRef iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function

给我带来错误的代码是:

For groups = 1 To i ' level 1 grouping
For iCol = 24 To 136
rCol = ConvertToLetter(iCol)
Cells(Start(groups) - 1, rCol).Formula = "=COUNTA(" & rCol & Start(groups) & ":" & rCol & Finish(groups) & ")"
Next
Next

我尝试将函数替换为公式本身:

  Cells(Start(groups) - 1, ConvertToLetter(iCol)).Formula = "=COUNTA(" & ConvertToLetter(iCol) & Start(groups) & ":" & ConvertToLetter(iCol) & Finish(groups) & ")"

调试器成功通过了第一个函数调用,但没有通过第二个和第三个函数调用。我收到的错误是“需要变量或过程,而不是模块”类型。对于第二种情况,我遇到了其他错误,我的头很模糊,我记不起它们了。

非常感谢任何帮助。我已经没有主意了。非常感谢!

最佳答案

您几乎不需要将列转换为字母。首先考虑使用FormulaR1C1

For groups = 1 To i ' level 1 grouping
For iCol = 24 To 136
lLast = Finish(groups) - Start(groups) + 1
Sheet1.Cells(Start(groups) - 1, iCol).FormulaR1C1 = _
"=COUNTA(R[1]C:R[" & lLast & "]C)"
Next iCol
Next groups

如果你不喜欢R1C1,可以更直接使用Address

For groups = 1 To i ' level 1 grouping
For iCol = 24 To 136
Set rStart = Sheet1.Cells(Start(groups), iCol)
Set rEnd = Sheet1.Cells(Finish(groups), iCol)

rStart.Offset(-1, 0).Formula = _
"=COUNTA(" & rStart.Address & ":" & rEnd.Address & ")"

Next iCol
Next groups

关于vba - 将函数输出分配给变量 Excel VBA 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15819570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com