使用字符串指定单元格时,为什么我的公式失败?

时间:2015-07-20 18:15:46

标签: vba excel-vba excel

我正在尝试编写一个visual basic宏来为多个单元格应用公式。基本上,我希望将每个单元格添加到其他单元格中,因此如果我有A1=1B1=2C1=3A2=4B2=5和{ {1}},如果我选择这些然后运行该程序,那么我需要C3=6A3=A1+A2B3=A1+B2

我解决这个问题的方法是编写两个for循环,然后根据循环变量的当前值将函数插入到单元格中。一切正常。如果插入一个虚函数,例如,C3=A1+C2子函数如预期的那样;但是,如果我基于循环变量插入函数,程序将抛出应用程序定义的或对象定义的错误。

如果我误解了错误的含义或错误的来源,我道歉。有问题的代码,如果它有帮助,就在下面。

"=A1+B1"

Sub Thing() Dim Rng As Range Set Rng = Application.Selection Dim r As Integer Dim c As Integer For r = 1 To Rng.Rows.Count Set cRow = Rng.Rows(r) For c = 1 To Rng.Columns.Count Dim col1 As String Dim col2 As String col1 = GetColumnName(cRow.Columns(c).Column) col2 = GetColumnName(cRow.Columns(1).Column) Cells(cRow.Row + ((r) * 1) + 3, cRow.Columns(c).Column).Formula = "=$" + col1 + " " + CStr(cRow.Row) + "+" + col2 + CStr(cRow.Row) + "" Next Next End Sub Function GetColumnName(colNum As Integer) As String Dim d As Integer Dim m As Integer Dim name As String d = colNum name = "" Do While (d > 0) m = (d - 1) Mod 26 name = Chr(65 + m) + name d = Int((d - m) / 26) Loop GetColumnName = name End Function col1是由我找到并复制的函数定义的字符串,名为col2GetColumnNamer是循环变量。 ccRow定义如果有必要,我可以发布更多上下文,但我希望不是。

我找不到这个问题的副本,但我真的不知道我的问题是什么,所以如果它是重复的话,我很抱歉。

相关的,更小的问题:有没有办法让办公室代码编辑器指定错误发生在哪一行?可以通过插入无意义的空格来找到Java错误,直到发生错误的行引用一小段代码:是否有类似的技巧?

1 个答案:

答案 0 :(得分:0)

在您设置的行中将运行时错误1004应用程序定义或对象定义错误添加到单元格中,代码失败:

Cells(cRow.Row + ((r) * 1) + 3, cRow.Columns(c).Column).Formula = "=$" + col1 + " " + CStr(cRow.Row) + "+" + col2 + CStr(cRow.Row) + ""

通过逐步执行代码,您可以识别出失败的行,但是没有一种简单的方法可以识别行中的哪个语句产生错误。调试此问题的最佳方法是写出公式的值以检查它是否有效:

Sub Thing()
    Dim Rng As Range
    Set Rng = Application.Selection
    Dim r As Integer
    Dim c As Integer


    Dim curFormula As String

    For r = 1 To Rng.Rows.Count
        Set cRow = Rng.Rows(r)
        For c = 1 To Rng.Columns.Count
            Dim col1 As String
            Dim col2 As String
            col1 = GetColumnName(cRow.Columns(c).Column)
            col2 = GetColumnName(cRow.Columns(1).Column)
            curFormula = "=$" + col1 + " " + CStr(cRow.Row) + "+" + col2 + CStr(cRow.Row) + ""
            Debug.Print curFormula
            Cells(cRow.Row + ((r) * 1) + 3, cRow.Columns(c).Column).formula = curFormula
        Next
    Next
End Sub

这给出了以下输出:     = $ B 5 + B5

如您所见,公式中有一个空格,这是问题的原因。您需要更改以下行:

curFormula = "=$" + col1 + " " + CStr(cRow.Row) + "+" + col2 + CStr(cRow.Row) + ""

为:

curFormula = "=$" + col1 + CStr(cRow.Row) + "+" + col2 + CStr(cRow.Row) + ""