Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 VBA-公式写入错误_Vba_Excel - Fatal编程技术网

Excel VBA-公式写入错误

Excel VBA-公式写入错误,vba,excel,Vba,Excel,我试图在我的vba代码中引入一个公式,但我在其中遇到了一个错误。请仔细阅读代码并分享您的想法 这是我用VBA代码编写的excel函数: GetUniqueCount(Range,Value) 下面是试图利用它的VBA代码: Sheets("sheet2").Activate With ThisWorkbook.Sheets("sheet2").UsedRange lastrow = .Rows(.Rows.Count).Row End W

我试图在我的vba代码中引入一个公式,但我在其中遇到了一个错误。请仔细阅读代码并分享您的想法

这是我用VBA代码编写的excel函数:

GetUniqueCount(Range,Value)
下面是试图利用它的VBA代码:

Sheets("sheet2").Activate
        With ThisWorkbook.Sheets("sheet2").UsedRange
            lastrow = .Rows(.Rows.Count).Row
        End With

    For i = 14 To lastrow
        check = Range("h" & i).Value
        If check <> "" Then
         Range("I" & i).Value = WorksheetFunction.GetUniqueCount(sheet1!.Range("A1:B100"), check)
        Else
        Range("I" & i).Value = ""
    Next

没有名为GetUniqueCount的工作表函数。如果这是代码中的函数,那么调用它的方法如下:-

Range("I" & i).Value = GetUniqueCount("Sheet1".Range("A1:B100"), check)

此代码假定您的函数与调用过程位于同一代码表上,或者声明为public。它必须有两个参数,第一个参数必须是一个范围,第二个参数的数据类型与
check
相同。如果没有声明
check
(这不是一个好主意),则其数据类型将是变量。

没有名为GetUniqueCount的工作表函数。如果这是代码中的函数,那么调用它的方法如下:-

Range("I" & i).Value = GetUniqueCount("Sheet1".Range("A1:B100"), check)

此代码假定您的函数与调用过程位于同一代码表上,或者声明为public。它必须有两个参数,第一个参数必须是一个范围,第二个参数的数据类型与
check
相同。如果您没有声明
check
(这不是一个好主意),那么它的数据类型将是可变的。

您的代码中可能存在其他错误、不合格的
范围等

由于您的
函数GetUniqueCount
不是Excel内置的
工作表函数
,而是您自己的UDF,因此无需使用
工作表函数.GetUniqueCount
调用它,只需
GetUniqueCount

请尝试以下代码:

Option Explicit

Sub Test()

Dim LastRow As Long, i As Long
Dim check As String

    With ThisWorkbook.Worksheets("sheet2")
        LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row

        Dim Rng As Range
        Set Rng = Worksheets("sheet1").Range("A1:B100")

        For i = 14 To LastRow
            check = .Range("H" & i).Value
            If check <> "" Then
                .Range("I" & i).Value = GetUniqueCount(Rng, check)
            Else
                .Range("I" & i).Value = ""
            End If
        Next i
    End With

End Sub
选项显式
子测试()
昏暗的最后一排一样长,我一样长
作为字符串的Dim check
使用此工作簿。工作表(“表2”)
LastRow=.Cells(.Rows.Count,“I”).End(xlUp).Row
变暗Rng As范围
设置Rng=工作表(“表1”)。范围(“A1:B100”)
对于i=14至最后一行
检查=.Range(“H”和i).Value
如果选择“”则
.Range(“I”&I).Value=GetUniqueCount(Rng,检查)
其他的
.Range(“I”和I).Value=“”
如果结束
接下来我
以
端接头

您的代码中可能存在其他错误、不合格的
范围等

由于您的
函数GetUniqueCount
不是Excel内置的
工作表函数
,而是您自己的UDF,因此无需使用
工作表函数.GetUniqueCount
调用它,只需
GetUniqueCount

请尝试以下代码:

Option Explicit

Sub Test()

Dim LastRow As Long, i As Long
Dim check As String

    With ThisWorkbook.Worksheets("sheet2")
        LastRow = .Cells(.Rows.Count, "I").End(xlUp).Row

        Dim Rng As Range
        Set Rng = Worksheets("sheet1").Range("A1:B100")

        For i = 14 To LastRow
            check = .Range("H" & i).Value
            If check <> "" Then
                .Range("I" & i).Value = GetUniqueCount(Rng, check)
            Else
                .Range("I" & i).Value = ""
            End If
        Next i
    End With

End Sub
选项显式
子测试()
昏暗的最后一排一样长,我一样长
作为字符串的Dim check
使用此工作簿。工作表(“表2”)
LastRow=.Cells(.Rows.Count,“I”).End(xlUp).Row
变暗Rng As范围
设置Rng=工作表(“表1”)。范围(“A1:B100”)
对于i=14至最后一行
检查=.Range(“H”和i).Value
如果选择“”则
.Range(“I”&I).Value=GetUniqueCount(Rng,检查)
其他的
.Range(“I”和I).Value=“”
如果结束
接下来我
以
端接头


是。我在一个单独的模块中的VBA代码中定义了该函数。如何调用该函数以及如何从单独的工作表中为其分配范围?工作表名称是否为“Sheet1”?或
sheet1
作为
CodeName
?@ShaiRado sheet1作为图纸名称更改为图纸(“sheet1”)。范围为@ShaiRadosuggests@VBA_Begineer请看我的回答。我在一个单独的模块中的VBA代码中定义了该函数。如何调用该函数以及如何从单独的工作表中为其分配范围?工作表名称是否为“Sheet1”?或
sheet1
作为
CodeName
?@ShaiRado sheet1作为图纸名称更改为图纸(“sheet1”)。范围为@ShaiRadosuggests@VBA_Begineer请看下面我的答案。我试图将支票声明为变体。这给了我一个错误——参数不匹配——你开始找出错误的根源。避免使用变量数据类型-无论是默认的还是有意的-除非您特别希望使用它的特殊优势。查看函数中的参数列表,确保
check
声明为相同的数据类型。我开始使用字符串类型,然后它给出编译错误-Next而不是for。检查是否错误地删除了
Next
。VBA不区分Next、End If和End With。其中任何一个都可能丢失。我重新启动了我的机器,现在它可以工作了。谢谢,先生!谢谢,洛蒂试图将支票声明为变体。这给了我一个错误——参数不匹配——你开始找出错误的根源。避免使用变量数据类型-无论是默认的还是有意的-除非您特别希望使用它的特殊优势。查看函数中的参数列表,确保
check
声明为相同的数据类型。我开始使用字符串类型,然后它给出编译错误-Next而不是for。检查是否错误地删除了
Next
。VBA不区分Next、End If和End With。其中任何一个都可能丢失。我重新启动了我的机器,现在它可以工作了。谢谢,先生!谢谢,洛蒂特给了我一个错误,因为参数不匹配。我将check声明为variant,当我将其声明为String时。它给出一个空字符串。@VBA\u Begineer在哪一行?你的单元格中有什么值?在if循环中-并直接指向你的支票。为什么你没有回答我的问题,哪一行?它是
检查=.Range(“h”和i).Value
?或
.Range(“I”&I).Value=GetUniqueCount(Rng,check)
?.Range(“I”&I).Value=GetUniqueCount(Rng,check)-此行。还有,先生,我不认为我可以声明为变量,因为我的函数将它声明为字符串!我也增加了这个问题的功能。请检查一下。由于参数不匹配,这给我带来了一个错误。我宣布支票为v