我在Excel工作表中遇到问题,可能是由于缺乏理解。基本上,我在单元格I2中有一个IF()语句,对于if_true,我想运行一个公共Sub,即Sub MyFunc(),它仅将行中的数据复制到新工作表中。
换句话说,我在单元格I2中:
=IF(OR(AND($D2="ABOVE", $F2>$E2, $H2="YES"), AND($D2="BELOW", $F2<$E2, $H2="YES")),MyFunc(),"")
这似乎根本不运行sub,如果我在VBE中运行Sub,它可以正常工作。
Sub MyFunc()
'begin populating table
'Date
Sheets("Sheet3").Range("A:A").End(xlDown).Offset(1, 0).Value = Format(Now(), "dd/mm/yyyy")
'DayofWeek
Sheets("Sheet3").Range("B:B").End(xlDown).Offset(1, 0).Value = Format(Now(), "ddd")
'copy code and paste in cell
Sheets("Sheet1").Range("A2").Copy Destination:=Sheets("Sheet3").Range("E:E").End(xlDown).Offset(1, 0)
'copy level
Sheets("Sheet1").Range("E2").Copy Destination:=Sheets("Sheet3").Range("F:F").End(xlDown).Offset(1, 0)
'delete row information
Worksheets("Sheet1").Range("A2").ClearContents
Worksheets("Sheet1").Range("C2:E2").ClearContents
Worksheets("Sheet1").Range("G2:H2").ClearContents
'resort colums
SortByMarket
End Sub
基于上述条件,关于如何调用此Sub,我有什么建议吗?
非常感谢您的帮助:)
答案 0 :(得分:0)
是的,如果您使用Andy Pope在此链接上执行的函数调用子程序是可能的:
https://www.ozgrid.com/forum/forum/help-forums/excel-general/41643-can-a-subroutine-be-called-within-a-function
您可以编写一个函数:
Function MyFunc()
Msgbox "Function started"
Call Copy
Application.Run "MySub"
End Function
然后您可以这样编写公式:
=IF(OR(AND($D2="ABOVE", $F2>$E2, $H2="YES"), AND($D2="BELOW", $F2<$E2, $H2="YES")),MyFunc(),"")
注意:如果这样不能正常工作,请先尝试键入一个单元格:
=MyFunc()
看看它是否返回任何东西
答案 1 :(得分:0)
因此,将if张贴在您的vba代码中的答案。
Sub Test()
If (Range("D2").Value = "ABOVE" And Range("F2").Value > Range("E2").Value And Range("H2").Value = "YES") Or (Range("D2").Value = "BELOW" And Range("F2").Value < Range("E2").Value And Range("H2").Value = "YES") Then
MsgBox "CLEAR"
' HERE YOUR CLEARING CODE
End If
End Sub
注意:我不会删除其他答案,因为我认为这是一种可能的选择,它也可以回答您提出的问题。