Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2315|回复: 3

[已解决]vba初学者的困惑

[复制链接]
发表于 2013-4-11 12:57 | 显示全部楼层 |阅读模式
本帖最后由 ccq000000 于 2013-4-11 13:03 编辑

   在学习vba八十集第十六集时遇到了两个问题
1:使用Find方法
    Sub c2()
      Dim r As Integer, r1 As Integer
      Dim icount As Integer
      icount = Application.WorksheetFunction.CountIf(Sheets("库存明细表").[b:b], [g3])
      If icount > 0 Then
       r = Sheets("库存明细表").[b:b].Find(Range("G3"), Lookat:=xlWhole).Row '查找号码第一次出现的位置
       r1 = Sheets("库存明细表").[b:b].Find([g3], , , , , xlPrevious).Row
       MsgBox r & ":" & r1
      End If
    End Sub
问:find前面不能加vba.find(...............).如果加上则显示运行错误438,为什么?(也不能加上application.worksheetfunction.find())
2:r = Application.CountIf(Range("b6:b10"), "<>")
问:"不等于空"应该表示成(range("b6:b10"),"<>""")但这样运行不起来,为什么?
       非常期待您的帮助,谢谢.
最佳答案
2013-4-11 13:33
Range.Find 方法
在区域中查找特定信息。
语法

表达式.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

表达式   一个代表 Range 对象的变量。

参数

名称 必选/可选 数据类型 说明
What 必选 Variant 要搜索的数据。可为字符串或任意 Microsoft Excel 数据类型。
After 可选 Variant 表示搜索过程将从其之后开始进行的单元格。此单元格对应于从用户界面搜索时的活动单元格的位置。请注意:After 必须是区域中的单个单元格。要记住搜索是从该单元格之后开始的;直到此方法绕回到此单元格时,才对其进行搜索。如果不指定该参数,搜索将从区域的左上角的单元格之后开始。
LookIn 可选 Variant 信息类型。
LookAt 可选 Variant 可为以下 XlLookAt 常量之一:xlWhole 或 xlPart。
SearchOrder 可选 Variant 可为以下 XlSearchOrder 常量之一:xlByRows 或 xlByColumns。
SearchDirection 可选 XlSearchDirection 搜索的方向。
MatchCase 可选 Variant 如果为 True,则搜索区分大小写。默认值为 False。
MatchByte 可选 Variant 只在已经选择或安装了双字节语言支持时适用。如果为 True,则双字节字符只与双字节字符匹配。如果为 False,则双字节字符可与其对等的单字节字符匹配。
SearchFormat 可选 Variant 搜索的格式。

返回值
一个 Range 对象,它代表第一个在其中找到该信息的单元格。

说明


如果未发现匹配项,则返回 Nothing。Find 方法不影响选定区域或当前活动的单元格。

每次使用此方法后,参数 LookIn、LookAt、SearchOrder 和 MatchByte 的设置都将被保存。如果下次调用此方法时不指定这些参数的值,就使用保存的值。设置这些参数将更改“查找”对话框中的设置,如果省略这些参数,更改“查找”对话框中的设置将更改使用的保存值。要避免出现这一问题,每次使用此方法时请明确设置这些参数。

使用 FindNext 和 FindPrevious 方法可重复搜索。

当搜索到指定查找区域的末尾时,此方法将绕回到区域的开始位置继续搜索。发生绕回后,要停止搜索,可保存第一个找到的单元格地址,然后测试后面找到的每个单元格地址是否与其相同。

若要对单元格进行模式更为复杂的搜索,请结合使用 For Each...Next 语句和 Like 运算符。例如,下列代码在单元格区域 A1:C5 中搜索字体名称以“Cour”开始的单元格。当 Microsoft Excel 找到匹配单元格以后,就将其字体改为 Times New Roman。

For Each c In [A1:C5] If c.Font.Name Like "Cour*" Then c.Font.Name = "Times New Roman" End If Next



示例


本示例在第一个工作表的单元格区域 A1:A500 中查找包含值 2 的所有单元格,并将这些单元格的值更改为 5。

Visual Basic for Applications
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
发表于 2013-4-11 13:33 | 显示全部楼层
Sheets("库存明细表").[b:b].Find,这个用的是RANGE对象的方法,跟平时你按CTRL+F的查找对话框实现的功能是相同的。

application.worksheetfunction.find,这个是工作作函数FIND,

两个参数都不同,母体也不同的。
回复

使用道具 举报

发表于 2013-4-11 13:33 | 显示全部楼层    本楼为最佳答案   
Range.Find 方法
在区域中查找特定信息。
语法

表达式.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

表达式   一个代表 Range 对象的变量。

参数

名称 必选/可选 数据类型 说明
What 必选 Variant 要搜索的数据。可为字符串或任意 Microsoft Excel 数据类型。
After 可选 Variant 表示搜索过程将从其之后开始进行的单元格。此单元格对应于从用户界面搜索时的活动单元格的位置。请注意:After 必须是区域中的单个单元格。要记住搜索是从该单元格之后开始的;直到此方法绕回到此单元格时,才对其进行搜索。如果不指定该参数,搜索将从区域的左上角的单元格之后开始。
LookIn 可选 Variant 信息类型。
LookAt 可选 Variant 可为以下 XlLookAt 常量之一:xlWhole 或 xlPart。
SearchOrder 可选 Variant 可为以下 XlSearchOrder 常量之一:xlByRows 或 xlByColumns。
SearchDirection 可选 XlSearchDirection 搜索的方向。
MatchCase 可选 Variant 如果为 True,则搜索区分大小写。默认值为 False。
MatchByte 可选 Variant 只在已经选择或安装了双字节语言支持时适用。如果为 True,则双字节字符只与双字节字符匹配。如果为 False,则双字节字符可与其对等的单字节字符匹配。
SearchFormat 可选 Variant 搜索的格式。

返回值
一个 Range 对象,它代表第一个在其中找到该信息的单元格。

说明


如果未发现匹配项,则返回 Nothing。Find 方法不影响选定区域或当前活动的单元格。

每次使用此方法后,参数 LookIn、LookAt、SearchOrder 和 MatchByte 的设置都将被保存。如果下次调用此方法时不指定这些参数的值,就使用保存的值。设置这些参数将更改“查找”对话框中的设置,如果省略这些参数,更改“查找”对话框中的设置将更改使用的保存值。要避免出现这一问题,每次使用此方法时请明确设置这些参数。

使用 FindNext 和 FindPrevious 方法可重复搜索。

当搜索到指定查找区域的末尾时,此方法将绕回到区域的开始位置继续搜索。发生绕回后,要停止搜索,可保存第一个找到的单元格地址,然后测试后面找到的每个单元格地址是否与其相同。

若要对单元格进行模式更为复杂的搜索,请结合使用 For Each...Next 语句和 Like 运算符。例如,下列代码在单元格区域 A1:C5 中搜索字体名称以“Cour”开始的单元格。当 Microsoft Excel 找到匹配单元格以后,就将其字体改为 Times New Roman。

For Each c In [A1:C5] If c.Font.Name Like "Cour*" Then c.Font.Name = "Times New Roman" End If Next



示例


本示例在第一个工作表的单元格区域 A1:A500 中查找包含值 2 的所有单元格,并将这些单元格的值更改为 5。

Visual Basic for Applications
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
回复

使用道具 举报

发表于 2013-4-11 13:34 | 显示全部楼层
WorksheetFunction.FindB 方法
FIND 与 FINDB 查找一个文本字符串内的另一个文本字符串,并返回一个数字,表示从文本字符串(从中查找另一个文本字符串)的第一个字符起开始查找的第一个文本字符串的起始位置。
语法

表达式.FindB(Arg1, Arg2, Arg3)

表达式   一个代表 WorksheetFunction 对象的变量。

参数

名称 必选/可选 数据类型 说明
Arg1 必选 String Find_text - 要查找的文本。
Arg2 必选 String Within_text - 包含要查找的文本的文本。
Arg3 可选 Variant Start_num - 指定要从其开始搜索的字符。within_text 中的第一个字符是编号为 1 的字符。如果省略 start_num,则假定其值为 1。

返回值
Double

说明


要点  FIND 用于使用单字节字符集 (SBCS) 的语言,而 FINDB 用于使用双字节字符集 (DBCS) 的语言。计算机上的默认语言设置会以下列方式影响返回值:

无论默认语言设置如何,FIND 始终将每个字符(不管是单字节还是双字节字符)作为 1 个字符计算。
启用对支持 DBCS 的语言的编辑并将它设置为默认语言时,FINDB 会将每个双字节字符作为 2 个字符计算。否则 FINDB 会将每个字符作为 1 个字符计算。
支持 DBCS 的语言包括日语、中文(简体)、中文(繁体)和朝鲜语。

FIND 和 FINDB 区分大小写并且不允许使用通配符。如果不想执行区分大小写的搜索或要使用通配符,可以使用 SEARCH 和 SEARCHB。
如果 find_text 为 ""(空文本),在 FIND 将匹配搜索字符串中的第一个字符(即,编号为 start_num 或 1 的字符)。
Find_text 不能包含任何通配符。
如果 within_text 中没有 find_text,则 FIND 和 FINDB 将返回错误值 #VALUE!。
如果 start_num 不大于 0,则 FIND 和 FINDB 将返回错误值 #VALUE!。
如果 start_num 大于 within_text 的长度,则 FIND 和 FINDB 将返回错误值 #VALUE!。
使用 start_num 可跳过指定编号的字符。以 FIND 为例,假设要处理文本字符串“AYF0093.YoungMensApparel”。要在文本字符串的说明部分中查找第一个“Y”的编号,请将 start_num 设置为等于 8,这样就不会搜索文本的序列号部分。FIND 从第 8 个字符开始,在下一个字符处查找 find_text,并返回数字 9。FIND 总是返回从 within_text 的起始位置计算的字符的编号,如果 start_num 大于 1,则会计算跳过的字符。

&#169; 2010 Microsoft Corporation。保留所有权利。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 08:15 , Processed in 0.757130 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表