我正在尝试编写一个visual basic宏来为多个单元格应用公式。基本上,我希望将每个单元格添加到其他单元格中,因此如果我有A1=1
,B1=2
,C1=3
,A2=4
,B2=5
和{ {1}},如果我选择这些然后运行该程序,那么我需要C3=6
,A3=A1+A2
,B3=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
是由我找到并复制的函数定义的字符串,名为col2
。 GetColumnName
和r
是循环变量。 c
由cRow
定义如果有必要,我可以发布更多上下文,但我希望不是。
我找不到这个问题的副本,但我真的不知道我的问题是什么,所以如果它是重复的话,我很抱歉。
相关的,更小的问题:有没有办法让办公室代码编辑器指定错误发生在哪一行?可以通过插入无意义的空格来找到Java错误,直到发生错误的行引用一小段代码:是否有类似的技巧?
答案 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) + ""