我正在尝试在运行时(huzzah)为加载项(双huzzah)创建一些条件格式,并且发现显然某些函数不能像在普通工作表中那样使用。 (当我尝试创建引用我可以在单元格中调用的VBA函数的CF时,我只得到一个无效的过程调用错误5,即使它在加载项而不是工作簿中;我可以使用内置函数创建CF罚款在函数中。)我发现的最明确的确认是here,但它并没有真正解释问题是什么;这是深奥的部分,我希望能够更多地了解我对此的期望。
橡胶与道路部分是:我可以完全避免使用VBA,并使用一系列仅限Excel,内置函数来验证给定单元格是否包含常量(即用户输入的值),公式(即某种计算,逻辑运算等 - 几乎以=开头),或链接(即对另一工作表或其他工作簿中的单元格的引用)?我知道Excel有这个决心触手可及;见证GoTo / Special的用途和速度。 我怎么能得到它呢?
提前感谢您的帮助。
答案 0 :(得分:1)
<强> Updated for Excel 2013: 强>
对于Office版本2013及更高版本,ISFORMULA¹功能可用。将其与NOT函数,AND函数以及COUNTBLANK,ISBLANK或LEN函数结合使用可生成公式,以确定单元格是否包含常量
E2:F2中的标准公式是
=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))
如果需要有关单元格值性质的更多信息,TYPE function可用于确定单元格内容是否为数字,文本,布尔值,错误或数组。
在协同使用时,此处讨论的本机工作表函数可以重现VBA的Range.SpecialCells method及其 xlCellTypeConstants 或 xlCellTypeFormulas xlCellType枚举中提供的结果
¹ Excel 2013引入了ISFORMULA功能。早期版本不提供此功能。
答案 1 :(得分:0)
不确定这是否是你想要的,但它似乎做了你要问的,至少有一些。
http://www.ozgrid.com/VBA/special-cells.htm
这是range.specialcells
方法。
它返回一个仅包含常量的范围,或仅包含公式等
如何使用此代码的示例如下所示:
Sub CheckForConstants()
Dim x As Range
Set x = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)
MsgBox "address of cells that contain numbers only is " & x.Address
Set x = Selection.SpecialCells(xlCellTypeConstants)
MsgBox "address of cells that contain constant of any type is " & x.Address
End Sub
您选择一个范围,然后执行此宏,它将返回符合要求的单元格的地址。
第一个x查找仅包含数字的单元格。 第二个x查找包含任何常量的单元格
这种情况下的范围是选择,但你可以设置你想要的,即范围(“a1:b5”)等。
我回到了工作表并使用了goto特殊方法。
显然它也使用range.special方法。
我使用了记录宏选项,这就是我得到的。
Selection.SpecialCells(xlCellTypeConstants, 23).Select
Range("M7").Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Range("I6:J16").Select
Selection.SpecialCells(xlCellTypeConstants, 1).Select
Range("L9").Select
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("CP").Select
Application.CutCopyMode = False
Range("I21").Select
ActiveSheet.DrawingObjects.Select
Application.Goto Reference:="GoToSpecialRoutine"
工作表上的goto特殊功能使用特殊单元格方法来处理它所做的一些事情。
它也使用其他人。在最后5行代码中,我更改了工作表并要求它转到对象。
它并没有真正归于他们。它只是选择它们。
工作表CP包含对象,它使用最后3行中的代码选择工作表上的所有对象。
最好看看goto special背后的代码是录制宏,然后使用工作表中的转到/特殊功能。
完成后,停止录制并查看录制的宏。
我不知道按照单元格的类型选择任何其他功能,但我只是一个新手,所以它可以很容易地在那里,我不知道。
答案 2 :(得分:0)
我认为你不能完全避免使用VBA,但你可以创建一个简单的UDF并在Excel中使用它
例如
Function IsFormula(Check_Cell As Range)
IsFormula = Check_Cell.HasFormula
End Function
和
Function IsLink(Check_Cell As Range)
If InStr(1, Check_Cell.Formula, "!", vbTextCompare) Then
IsLink = Check_Cell.HasFormula
End If
End Function
=如果A1中有公式,则IsFormula(A1)将返回TRUE,否则返回FALSE 如果A1中的公式包含'!',则IsLink(A1)将返回TRUE否则为FALSE
你可以组合这些并创建一个字符串输出“Formula”,“Link”,“Value”