Excel VBA-公式写入错误
我试图在我的vba代码中引入一个公式,但我在其中遇到了一个错误。请仔细阅读代码并分享您的想法 这是我用VBA代码编写的excel函数: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
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