将函数输出分配给variablesExcel VBA时出错

我正在使用我从Microsoft复制的一个函数,它需要一个列号并重新分配列字母。 我需要这样做来创build一个公式。 我整天都在研究,无法确定我错误的原因(我也试图把它作为一个子过程来完成)。 该function在它自己的模块中。 我testing了它,它工作正常:

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) & ")" 

debugging器通过第一个函数调用,但不是第二个和第三个。 我收到的错误是“期待variables或程序,而不是模块”的types。 在第二种情况下,我得到了其他的错误,我的头很模糊,我不记得他们。

任何帮助是极大的赞赏。 我已经用完了想法。 非常感谢!

几乎不需要将列转换为字母。 首先考虑使用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 

您正在使用的function是错误的。 检查这个例子

 Sub Sample() Dim iCol As Integer For iCol = 131 To 134 Debug.Print iCol; ConvertToLetter(iCol) Next iCol End Sub 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 

产量

 131 D[ 132 D\ 133 D] 134 D^ 

使用我从我提到的链接中select的代码。

 rcol = Split(Cells(, iCol).Address, "$")(1) 

代替

 rCol = ConvertToLetter(iCol) 

以下函数将列号转换为字母:利用.Address方法来简化生活。

 Function convertToLetter(colnum) mycell = [A1].Offset(0, colnum - 1).Address convertToLetter = Mid(mycell, 2, Len(mycell) - 3) End Function 

但现在我看着你的代码 – 当你使用Cells函数时,应该用数字而不是字母来调用它。 所以你有另一个问题!

尝试以下操作:

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

注意我在Cells(Start(groups)-1, iCol) =语句的一部分中使用iCol而不是rCol 。 这可能不是唯一的错误…