Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 通过udf应用条件格式时出现问题_Excel_Vba_User Defined Functions_Conditional Formatting - Fatal编程技术网

Excel 通过udf应用条件格式时出现问题

Excel 通过udf应用条件格式时出现问题,excel,vba,user-defined-functions,conditional-formatting,Excel,Vba,User Defined Functions,Conditional Formatting,因此,我正在开发一个udf,我最终会将其制作成一个插件来帮助处理数据,如果单元格可以突出显示以吸引用户对任何问题的注意,这将是首选 udf如下所示: Function AnalyzeData() Dim Headers() As Variant Dim Row1 As Variant Headers = Array(Row1, Row2, Row3, Row4, Row5) Row1 = Array("Final Curve", "", "Cr", "Fe", "Ni", "Cu", "Zn

因此,我正在开发一个udf,我最终会将其制作成一个插件来帮助处理数据,如果单元格可以突出显示以吸引用户对任何问题的注意,这将是首选

udf如下所示:

Function AnalyzeData()
Dim Headers() As Variant
Dim Row1 As Variant

Headers = Array(Row1, Row2, Row3, Row4, Row5)

Row1 = Array("Final Curve", "", "Cr", "Fe", "Ni", "Cu", "Zn", "As", "Ag", "Cd", "Sn", "Pb")

Row2 = Array("Level", "Nominal", 100, 100, 100, 100, 100, 100, 100, 100, 100, 100)
col1 = Array("Level", "Cal 1", "Cal 2", "Cal 3", "Cal 4", "Cal 5", "Cal 6", "Cal 7", "Cal 8", "Cal 9", "Cal 10", "", "", "Level", "Cal 1", "Cal 2", "Cal 3", "Cal 4", "Cal 5", "Cal 6", "Cal 7", "Cal 8", "Cal 9", "Cal 10", "", "")
col2 = Array("", "Nominal", "0.1", "0.2", "0.5", "1.0", "2.5", "5.0", "10", "20", "30", "50", "", "", "Nominal", "0.1", "0.2", "0.5", "1.0", "2.5", "5.0", "10", "20", "30", "50", "", "")

Dim Location() As Variant

Select Case TypeName(Application.Caller)
    Case "Range"
        Location = Array(Application.Caller.Row, Application.Caller.Column)
        If Location(0) = 1 And Location(1) = 1 Then
            BuildArrays
            MethodCheck
            On Error Resume Next
            threecf

            AnalyzeData = Row1(0)
        Else
            Select Case Location(1)

                Case 1 - 2
                    Case 1
                        AnalyzeData = col1(Location(0) - 2)
                    Case 2
                        AnalyzeData = col2(Location(0) - 1)
                Case Else

                    Select Case Location(0)

                        Case 1, 14
                            AnalyzeData = SelectedAnalytes(Location(1) - 3)
                        Case 2, 15
                            AnalyzeData = Row2(Location(1) - 1)
                        Case 3 To 12
                            AnalyzeData = Round(STDArray(Location(0) - 2,Location(1) - 3), 3)
                        Case 13, 26
                            AnalyzeData = ""
                        Case 16 To 25
                            If CalValues(Location(1) - 3, Location(0) - 15) = "" Then
                                AnalyzeData = "N/A"
                            ElseIf Round(STDArray(Location(0) - 15, Location(1) - 3) / CalValues(Location(1) - 3, Location(0) - 15) * 100, 0) <= 100 + Acceptance And Round(STDArray(Location(0) - 15, Location(1) - 3) / CalValues(Location(1) - 3, Location(0) - 15) * 100, 0) >= 100 - Acceptance Then
                            AnalyzeData = Round(STDArray(Location(0) - 15, Location(1) - 3) / CalValues(Location(1) - 3, Location(0) - 15) * 100, 0) & "%"
                            Else
                                AnalyzeData = "Fail acceptance"
                            End If

                        End Select
                End Select
        End If

    Case "String"
        AnalyzeData = Application.Caller
    Case "Error"
        AnalyzeData = "Error"
    Case Else
        AnalyzeData = "unknown"
End Select

End Function
这是我在网上寻找帮助时发现的。 所以没有台词

            On Error Resume Next
            threecf
我的函数可以正常工作并适当地分析数据,但是当单元格A1调用threecf sub时,如果没有“下一步错误恢复”,则不会继续出错,并且根本不会应用条件格式

如果三个CF中的范围更改为

rg=cells(1,1)
然后,该函数仍然需要在出错时继续下一步,但应用了条件格式,但不正确。它添加条件,但不为每个条件设置格式

如果我通过F5运行3CFS,那么它工作正常

我对通过udf应用条件格式的理解是否不正确,因为这无法实现


理想情况下,我的udf将计算数据中值的恢复百分比,并应用条件格式来突出显示有问题的值,但是这是否需要由每个单元格而不是应用它的起始单元格来完成?

下一步执行错误恢复时会出现什么错误?自定义项可以执行的操作有限制:请特别注意[…]这样的函数不能执行以下任何操作:插入、删除、,或者格式化电子表格上的单元格。它不会像弹出提示并给出错误代码那样给出错误,它只是将单元格计算为值!因此子例程可以应用条件格式,但是udf不能调用应用条件格式的子例程?@VincentG您可以添加它作为答案。因此,我尝试将对threecf的调用添加到一个用户表单中,我必须提示用户选择他们正在使用的方法,这与应用条件格式相同,但没有实际的格式。但随后我从threecf sub复制了代码,并将其放在userform中,它只应用字体颜色,而不应用内部。所以这很有帮助。下一步将继续执行错误所需的这两个测试,但不要提示我错误具体发生在哪里
rg=cells(1,1)