8

我正在尝试在运行时(huzzah)为加载项(double huzzah)创建一些条件格式,并且发现,显然,某些函数不能像在普通工作表中那样使用。(在尝试创建引用 VBA 函数的 CF 时,我只是得到一个无效的过程调用错误 5,即使它在加载项而不是工作簿中;我可以使用内置的 -在功能中。)我为此找到的最清楚的确认是here,但它并没有真正解释问题所在;这是深奥的部分,我很想听到更多关于我能期待什么的信息。

橡胶遇到道路的部分是:我可以完全避免 VBA,并使用一系列仅限 Excel 的内置函数来验证给定单元格是否包含常量(即用户输入的值)、公式 (即某种计算、逻辑运算等——几乎以 = 开头)或链接(即对另一个工作表或另一个工作簿中的单元格的引用)?我知道 Excel 触手可及。见证 GoTo/Special 的用途和速度。怎么能得到它呢?

在此先感谢您的帮助。

4

3 回答 3

1

Excel 2013 更新:

对于 Office 2013 及更高版本,可以使用ISFORMULA ¹ 函数。将此与NOT函数、AND函数以及COUNTBLANKISBLANKLEN函数结合起来,可以生成一个公式来确定单元格是否包含常数。

E2:F2 中的标准公式是,

=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))

      ISFORMULA_更新

如果需要有关单元格值性质的更多信息,可以使用TYPE 函数来确定单元格内容是数字、文本、布尔值、错误还是数组。

当协同使用时,此处讨论的本机工作表函数可以重现 VBA 的Range.SpecialCells 方法及其xlCellTypeConstantsxlCellTypeFormulas xlCellType 枚举提供的结果。


¹ ISFORMULA函数是在 Excel 2013引入的。它在早期版本中不可用。

于 2016-02-25T05:15:41.193 回答
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 查找包含任何常量的单元格

在这种情况下,范围是选择,但您可以设置为您想要的,即 range("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 背后的代码的最佳选择是记录一个宏,然后在工作表中使用 goto / special 功能。

完成后,停止录制并查看您录制的宏。

我不知道按单元格类型选择的任何其他功能,但我只是一个新手,所以它很容易在那里并且我不知道。

于 2010-10-20T08:14:24.913 回答
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 否则为假

您可以结合这些并创建一个字符串输出 "Formula","Link","Value"

于 2011-04-17T10:18:22.470 回答