Function Foo(thiscell As Range) As Boolean Foo = thiscell.hasFormula And (InStr(1, UCase(Split(thiscell.formula, Chr(40))(0)), "bar") > 0) End Function 这个函数用于在(。)之前testing是否存在某个子string(在这种情况下为bar)。 我遇到的情况是,当传入函数的单元格为空时,thisCell.hasFormula为false,但是在和之后的语句仍然被评估。 这给了我一个下标超出范围的错误在运行时。 是否VBA实际上继续评估第二个参数和,即使当第一个是错误的?
问题:寻找一种更有效的方法来查找在1d数组中是否存在精确的匹配值 – 本质上是一个布尔值true/false 。 我可以忽略明显的东西吗? 或者我只是使用错误的数据结构,通过使用数组时,我可能应该使用集合对象或字典? 在后者中,我可以分别检查.Contains或.Exists方法 在Excel中,我可以检查vector数组中的值,如: If Not IsError(Application.Match(strSearch, varToSearch, False)) Then ' Do stuff End If 这将返回一个完全匹配的索引,显然受到Match函数的限制,它只能在这个上下文中find第一个匹配的值。 这是一种常用的方法,也是我长期以来使用的方法。 这对于Excel来说足够满意 – 但其他应用程序呢? 在其他应用程序中,我可以做基本相同的事情,但需要启用Excel对象库的引用,然后: If Not IsError(Excel.Application.match(…)) 这似乎很愚蠢,而且由于权限/信任中心/等原因很难在分布式文件上pipe理。 我曾尝试使用Filter()函数: If Not Ubound(Filter(varToSearch, strSearch)) = -1 Then 'do stuff End If 但是这个方法的问题是Filter返回一个部分匹配的数组,而不是一个完全匹配的数组。 (我不知道为什么这将是有用的返回子string/部分匹配。) 另一种方法是从字面上遍历数组中的每个值(这也是我认为非常常用的) – 这看起来比调用Excel的Match函数更加不必要的繁琐。 For each v in vArray If v = strSearch […]
我正在创build一个快速的子邮件进行有效性检查。 我想删除“E”列中不包含“@”的整行联系人数据。 我使用了下面的macros,但是它的运行速度太慢,因为Excel在删除之后移动了所有的行。 我试过另一种技术: set rng = union(rng,c.EntireRow) ,然后删除整个范围,但是我不能防止错误信息。 我也尝试过将每行添加到select中,并且在select了所有内容之后(如在Ctrl + Select中),随后将其删除,但找不到适当的语法。 有任何想法吗? Sub Deleteit() Application.ScreenUpdating = False Dim pos As Integer Dim c As Range For Each c In Range("E:E") pos = InStr(c.Value, "@") If pos = 0 Then c.EntireRow.Delete End If Next Application.ScreenUpdating = True End Sub
这就是我想要做的事情,而且我有点麻烦。 我有一个工作簿,我想从不同的文件收集数据做这样的事情。 Do While THAT_DIFFERENT_FILE_SOMEWHERE_ON_MY_HDD.Cells(Rand, 1).Value <> "" And Rand < 65536 then 'I will search if the last row in my main worksheet is in this file… End Loop 如果是这样,我会退出While循环,如果不是,我会复制一切。 其实这不会像我想要的那样工作,但我不会find正确的algorithm的麻烦。 我的问题是,我不知道如何访问不同的工作簿。
是否有一个简单的(单行)在VBA中search数组中的string? 或者我需要遍历每个元素,并将其与目标string进行比较? 编辑:这是一个一维数组。 我只需要知道如果一个string在数组中的某处。 IE: names(JOHN, BOB, JAMES, PHLLIP) 我如何知道“JOHN”是否在数组中,它需要最小化,因为它会重复大约5000次,我不希望函数减慢整个过程。
如何在VBA中从C:\Documents\myfile.pdf中提取文件名myfile.pdf ?
我想查找一个string是否包含“,”(逗号)。 除了读char-by-char之外,还有别的select吗?
我在excel工作表中有一个较大的表格: Column_1 | Column_2 | Column_3 ValueA ValueB ValueC …. 我需要的是一个函数,将作为input的范围和类似SQL的查询string,并返回匹配查询的行范围,例如: =SQL_SELECT(A1:C1000, "SELECT * WHERE Column_1 = ValueH AND Column_3 = blah") 有这样的事情吗? 或者什么是实施自己的最佳方式? 谢谢
两者有什么区别? 我一直以为VBA是VB的一个“跛脚”版本,但是当有朋友问我有一天,我不知道实际的区别是什么。 另外,例如使用Excel时,是VB还是VBA?
我一直在试图使用IE自动化谷歌searchExcel中的文本string。 我想要返回excel中另一个单元格的第一个结果的网站的超链接。 这可能吗? 我有一个60,000条logging的列表,我需要谷歌search,并在第一个结果中返回网站的超链接。 有没有其他的方法可以推荐? 我感谢提前的帮助。