【发布时间】:2015-08-03 08:53:28
【问题描述】:
我想不通。我试图让我的公式更加动态。但它总是说找不到prev,但我将prev设置为工作表。 PrevSheetName 返回上一个工作表的名称(有效)。 请帮助我,在我的其他代码中,我一直尝试使用“ActiveSheet.Previous”,但它似乎不适用于公式。
Set prev = Worksheets(PrevSheetName)
Set rng = ActiveSheet.Range("D3")
rng.FormulaR1C1 = "=SUMIF(prev!C[1],RC[-2],prev!C[5])"
Range("D3").Copy Range("D4:D" & lRow)
这是我的第一个代码并且有效
Set rng = ActiveSheet.Range("D3")
rng.FormulaR1C1 = "=SUMIF('Projekt 1'!C[1],RC[-2],'Projekt 1'!C[5])"
Range("D3").Copy Range("D4:D" & lRow)
这是我的 PrevSheetName,已将名称放入 " "
Function PrevSheetName(Optional ByVal WS As Worksheet = Nothing) As String
Application.Volatile True
Dim S As String
Dim Q As String
If IsObject(Application.Caller) = True Then
Set WS = Application.Caller.Worksheet
If WS.Index = 1 Then
With Application.Caller.Worksheet.Parent.Worksheets
Set WS = .Item(.Count)
End With
Else
Set WS = WS.Previous
End If
If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
Q = "'"
Else
Q = vbNullString
End If
Else
If WS Is Nothing Then
Set WS = ActiveSheet
End If
If WS.Index = 1 Then
With WS.Parent.Worksheets
Set WS = .Item(.Count)
End With
Else
Set WS = WS.Previous
End If
Q = vbNullString
End If
PrevSheetName = Q & WS.Name & Q
End Function
我只想将“Projekt 1”与上一张表交换
【问题讨论】:
-
如我所见,您使用“prev”作为公式的一部分,就像您在 Excel 工作表中键入它一样,而不是作为 VBA 变量。试试这个:用
"=SUMIF(" & prev.name & "!C[1],RC[-2]," & prev.name & "!C[5])"替换"=SUMIF(prev!C[1],RC[-2],prev!C[5])"您在vba 中执行的过程与手动将公式输入Excel 单元格相同。这意味着工作表的名称必须是单元格值的一部分,而不是变量名。 -
谢谢,但是我该如何解决呢?
-
我很早就提交了评论 ;-) 现在已经修复了
-
尝试在 excel 表中手动获取此公式一次,然后使用 vba 重建它。使用 watch-object 来找到 prev-object 的正确值
标签: excel vba reference worksheet-function worksheet