EXCEL VBA,为啥函数子过程中不能使用find方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL VBA,为啥函数子过程中不能使用find方法。相关的知识,希望对你有一定的参考价值。

Public Function MDD(DH As String)
MDD = Sheet1.Cells(Sheet1.Range("a:a").Find(what:=DH).Row, 6)
End Function
其中Sheet1.Range("a:a").Find(what:=DH)怎样都查找不到,值都是nothing。
请教高手解决,谢谢。
如图:搜索的区域a列为公式生成。
哎呀,我自己解决了,FIND方法中有一个搜索选项lookin,参数设为xlValues就好了。

可以查到啊?

可能你的用法错了!

Public Function MDD(DH As String)

MDD = Sheet1.Cells(Sheet1.Range("a:a").Find(what:=DH).Row, 6)


End Function


Sub A()

MsgBox MDD("PP")

End Sub


追问

如果您类别的字符是用公式生成出来的呢?
比如TEXT(C13,"yymm")
C13是当前时间

追答

=MDD(TEXT(A13,1))这样呢?

追问

不行呀,是搜索的区域的值是由公式生成的,不是搜索项是公式生成的。
DH可以是一个表达式的。

追答

不明白你说的是什么意思了,你是说F13里面是一个公式?也可以显示出来啊?显示的结果就等于F12的结果啊?

再不行你就把文件传上来我看看呢?

参考技术A 如果是MDD为nothing,那就是你的Sheet1表中第6列没有值;

如果是Find为nothing,那就是你的Sheet1表中A列不存在DH所指定的字符串;
  否则就是不存在名为Sheet1的表追问

sheet1肯定存在,DH更是肯定存在。

追答

那就只能是你在传入的DH的类型和表格里实际的值的类型不匹配了

参考技术B excel中的函数和VBA中并不是完全对应的,试试InStr追问

咱们说的完全不是一个问题。不过还是谢谢你。

VBA研究VBA中如何用求和函数SUM求和

作者:iamlaosong

SUM是Excel的函数,在VBA中调用需要加上Application.WorksheetFunction.Sum(),但是,Excel写法却不能用。

比如,excel单元格中可以写成=sum(d2:d100),VBA中是不能这么写的,即使加上引号写成Application.WorksheetFunction.Sum(“d2:d100”),语法上倒是没什么问题,却得不到正确的结果。

正确的写法是:Application.WorksheetFunction.Sum(range(“d2:d100”)),如果用变量,写法如下:

        maxrow = [D65536].End(xlUp).Row             '行数,出库单号数量
        shuliang = Application.WorksheetFunction.Sum(Range("d2:d" & maxrow))

其中:

Application表示当前的EXCEL运行的程序。
WorksheetFunction表示调用当前EXCEL程序里的公式。
后面出现的SUM就是EXCEL里的默认公式。

Excel求和函数很多,如下:

SUM、SUMIF、SUMIFS、SUMPRODUCT、DSUM

以上是关于EXCEL VBA,为啥函数子过程中不能使用find方法。的主要内容,如果未能解决你的问题,请参考以下文章

VBA 使用字符串数组作为子字符串参数 InStr 函数 (Excel)

执行代码时,执行不会在 excel vba 函数中移动

Excel VBA 函数不能将参数用作范围

Excel VBA - 条件格式中的用户定义函数

为啥sql数据库的表用VBA导到EXCEL中的速度比EXCEL的数据导入功能慢

从 vba 代码调用 Excel 的工作表函数