Range.Find 在 VBA Excel 中不区分一月和十一月(二月和十二月)

2024-01-29

假设我有以下琐碎的任务:

  • 连续写出 2016 年 1 月到 2018 年 6 月的第一个日期
  • 找到 01-Janu-2016 并将其涂成红色
  • Use Range.Find()

因此,我创建了一个代码,从 1 循环到 30 并写入每个月的第一个日期。然后我用Rows(1).Find(CDate("01.01.2016")) or Rows(1).Find(DateSerial(2016,1,1))我认为我的任务已经准备就绪。

我运行代码,在 Excel 2010 和 Excel 2016 中都看到了这一点:

问题:这背后有什么原因吗?或者是Range.Find()函数记录为这样的行为?

Public Sub TestMe()

    Cells.Clear

    Dim cnt             As Long
    For cnt = 1 To 30
        Cells(1, cnt) = DateAdd("M", cnt - 1, DateSerial(2016, 1, 1))
        Cells(1, cnt).NumberFormat = "MMM-YY"
    Next cnt

    Dim foundRange      As Range
    Set foundRange = Rows(1).Find(CDate("01.01.2016"))
    'Set foundRange = Rows(1).Find(DateSerial(2016, 1, 1))  'the same false result
    'Set foundRange = Rows(1).Find("01.01.2016")             'does not find anything
    If Not foundRange Is Nothing Then
        foundRange.Interior.Color = vbRed
    End If

End Sub

一般来说,Range.Find()有一个可选的After参数,它是第一个单元格Range。在我们的例子中,After参数被省略,因此被认为是A1它是最后检查的。如果您在第一个循环后停止代码并手动删除Nov 16来自 Excel,然后继续代码,它将返回单元格Jan 16 in red.

至于十一月被认为找到了,它就把它还给它,并且不再进一步。问题更像是——逻辑是什么2016 年 11 月 1 日2016 年 1 月 1 日,甚至部分?


每当.Find(LookAt:=xlPart)用于一系列日期,它采用不带日期的日期.Value2 https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-value2-property-excel,但它默默地将它们转换为String遵循美国日期格式 -MM/DD/YY并查看这个字符串。 Excel 中日期的显示格式完全无关,只要单元格格式设置为日期即可。

因此,一月的每一天都可以在 11 月中找到,二月的每一天都可以作为子字符串在 12 月中找到,从而在一个日历年内可能出现 58 个(或闰年中的 59 个)不同错误:


为了避免这个错误,最好的解决方案是看看xlWhole明确地。如果没有提及的话,Range.Find()寻找部分字符串。

另一个问题是在哪里Range.Find开始。根据文档 https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-find-method-excel开始AFTER提供的或默认的单元格,并且仅在循环回来后查看起始单元格。

您希望在其后开始搜索的单元格。这对应于从用户界面进行搜索时活动单元格的位置。请注意,After 必须是区域中的单个单元格。请记住,搜索在此单元格之后开始;在该方法返回到该单元格之前,不会搜索指定的单元格。如果未指定此参数,则搜索将在范围左上角的单元格之后开始。

所以,通过不定义XlWhole和一个起始单元格,搜索的第一个单元格是B1 not A1,并且它会在循环时先找到部分日期,然后再找到正确的日期。

因此,将起始单元格设置在范围末尾即可:

Set foundRange = Rows(1).Find(DateSerial(2016, 1, 1), [XFD1])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Range.Find 在 VBA Excel 中不区分一月和十一月(二月和十二月) 的相关文章

  • 如何根据python中的文件名检索每个文件的datemodtime?

    我当前的流程涉及循环遍历源目录并将每个文件的名称添加到 python 中的数据帧中 我也想获取每个文件的修改日期 import datetime import os import pandas as pd set src directory
  • 删除 Excel 表格中的所有数据行(第一行除外)

    就在最近 我一直在尝试删除表中的所有数据行 除了第一个数据行 需要清除 一些正在执行的表可能已经没有行 所以我运行它时遇到问题 因为使用 DataBodyRange Rows Count在没有行 只有页眉和 或页脚 的表上会导致错误 我到处
  • 使用 UiPath 循环 Excel 文件中的 URL

    我尝试了几种方法 但不知怎的 它们看起来不干净 我有一个 Excel 格式的 URL 文件 一列中有 400 多个 URL 我希望 UiPath 从该文件中读取并一一浏览这些 URL 我尝试让 导航到 从从 Excel 读取的变量中读取 但
  • 如何使用joda时间将固定的毫秒数格式化为hh:mm:ss?

    我输入了 34600 毫秒 我想以 00 00 34 HH MM SS 的格式输出 为此我应该查看 JDK Joda time 的哪些类 我需要它是高效的 最好是线程安全的 以避免每次解析时创建对象 谢谢 编辑 使用此代码提供时区敏感的结果
  • Excel 的查找和查找下一个 VBA

    我一直在试图弄清楚如何处理这个问题 但基本上我想要一种方法来打印 B 列中的值 给定与 A 列匹配的特定值 例如 Column A Column B 1 ABC 2 DEF 3 GHI 1 JKL 我想在使用 find findnext 或
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 求除某些列之外的 SUM

    以下是我所拥有的 A B C D E F G H I J K 1 2 3 4 5 6 7 8 9 10 50 为了找到SUM
  • CURL 相当于使用 VBA 的 POST JSON 数据

    我知道这与之前提出的一些问题类似 但有些东西仍然对我不起作用 如何执行以下命令 curl X POST data statements json H Content Type application json user username p
  • SQL如何显示某个日期之前的数据

    我有几张桌子 一个是一个工人表显示工人代码 名字和姓氏 工作日期其中显示工人代码 工作开始日期 结束日期和工作区域代码 导师有工人编号 名字 姓氏和工作区号 Job area有工作区域代码名称和主管 我想要做的是在日期 10 09 10 之
  • Outlook 中用于删除重复电子邮件的宏 -

    Public Sub RemDups Dim t As Items i As Integer arr As Collection f As Folder parent As Folder target As Folder miLast As
  • 如何将毫秒转换为天、小时、分钟

    我尝试这样做 long Plptime player getStatistic Statistic PLAY ONE TICK 50L from ticks to ms 1 tick 20 each sec by 50 gives apro
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • 这个 if 语句中怎么有太多参数

    My IF下面的声明不断错误射击 指出参数太多 为什么是这样 谁能看出下面的语句有什么错误吗 IF G7 EUR H7 1 15 L7 IF G7 USD H7 1 35 L7 IF G7 AUD H7 1 35 L7 IF G7 CAD
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • 如何制作具有固定日期格式的jtextfield?

    我在使用创建固定日期格式时遇到问题JTextField 有没有办法JTextField有固定的日期格式 您可以将 JFormattedTextField 与简单日期格式 http docs oracle com javase 7 docs
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • 参考上一个问题:为什么 VBA 没有加载所有发票详细信息

    除了上一个问题之外 我们在销售发票上仍然存在相同的加载失败问题 下面的 VBA Json 仍然仅加载一行或第一个产品详细信息行 而不是与表中该销售发票合作的所有产品行详细信息 我们希望下面的 VBA 能够根据参数加载发票详细信息 例如 如果
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然

随机推荐

  • ANTLR语法互左递归

    我确实知道这个问题已经被问过很多次了 我正在尝试使用 ANTLR 构建语法 Predicate LOWERCASE Predicate VarChars VarChars LOWERCASE UPPERCASE fragment LOWER
  • 包需要 NuGet 客户端版本“2.12”

    我尝试在 Visual Studio 2012 中安装 WindowsAzure Storage 8 0 1 但出现错误 包需要 NuGet 客户端版本 2 12 或更高版本 但当前 NuGet 版本是 2 8 60318 667 运行命令
  • CoreLocation线程崩溃崩溃:com.apple.CoreLocation.ConnectionClient.0x16fcb870.events

    我在我们的生产应用程序中的 Apple CoreLocation 线程中遇到了此崩溃 我无法在测试中重现它 也很难弄清楚它的内部 CoreLocation 目前 这种情况只占人口的一小部分 但我可以看到它正在变得越来越大 Crashed c
  • VB.net、调用、委托和线程。无法弄清楚如何跨类使用它们

    长话短说 我在尝试弄清楚如何在使用线程时使用调用和 或委托从单独的类更新用户表单时遇到了困难 我很确定这对于有更多经验的人来说是愚蠢而明显的 我知道可能需要委托 但我所有的努力似乎只有在从主线程调用它时才有效 我在网上查了半天 还是没有明白
  • DSL 的嵌入式脚本引擎

    我正在开发一个需要嵌入式 DSL 来满足其预期要求的项目 DSL 将基于用户定义的事件 这是所需语法的模型 user defined event 1 event body user defined event 2 event body 可能
  • 稍微旋转文本——我应该使用 css 还是 javascript?

    我正在尝试旋转一段文本 如下所示 这可以用 css 来完成还是需要使用 javascript 您可以使用 CSS3 以跨浏览器的方式做到这一点transform https developer mozilla org en CSS moz
  • 如何将 HDMI 1.4a 兼容的立体信号从 OpenGL 应用程序输出到 3DTV?

    我有一个 OpenGL 应用程序 可以通过 HDMI 将立体 3D 视频输出到现成的电视 但它目前要求显示器支持 1 4a 之前的手动选择正确格式的方法 并排 上下ETC 但是 现在我需要支持一个仅支持 HDMI 1 4a 3D 信号的设备
  • 在 Spark 结构化流中创建 Dataframe forEachWriter 以插入 kudu 表问题

    我有一个问题 我尝试寻找解决方案 但无法找到任何解决方案 并且希望获得任何 指针 所以我试图将 Spark 结构化流与 Apache Kudu 集成 我正在从 Kafka 读取流并进行一些处理 现在应该写入 Kudu 表 问题是 Spark
  • 将字符向量中的日期替换为特定格式

    我得到以下字符向量 On the evening of 2017 04 23 I was too tired to complete my homework that was due on 24 04 2017 我需要搜索它以查找所有出现的
  • 使用 Terraform 或 Helm 在 EKS 集群上的 ISTIO 上进行设置

    我是 Terraform 和 Helm 世界的新手 我需要在 AWS EKS 集群上设置 Istio 我能够使用 Terraform 设置 EKS 集群 我正在考虑通过编写 terraform 模块使用 Terraform 在 EKS 集群
  • 具有默认值的实例变量的 Morphia 投影行为

    我不确定 Morphia 是否是这样设计的 但它是这样的 Student class 方法略 Entity value students noClassnameStored true public class Student Id priv
  • Google 登录 - GoogleIdTokenVerifier 延迟验证令牌

    我已经实现了从 Android 或 iOS 设备接收 Google 登录令牌并尝试验证它的后端 代码几个月前工作正常 没有改变 但最近开始拒绝所有无效令牌 当我在发布时间约 10 秒后尝试使用之前失败的令牌再次重复验证时 它开始工作并返回用
  • C#/.NET 相当于 Java 的 Matcher.matches() 和 Matcher.lookingAt()

    我正在寻找一种方法来确定单个正则表达式是否与整个字符串 字符串的开头或 C 中的一部分匹配 在Java中 你可以构造一个Matcher对象 并使用方法matches 检查它是否与整个输入匹配 lookingAt 查看它是否与输入的开头匹配
  • 在选项卡布局上实现分页

    我知道如何使用 xml 布局开发选项卡活动 而且我知道如何在 android 中进行分页 如 android market 应用程序中所示 但我不知道如何将此分页概念与选项卡活动合并以及如何从 java 代码创建选项卡活动 请参阅下面的代码
  • 如何在 Yii-2 应用程序中添加验证码?

    我正在尝试将验证码添加到登录表单中 我的环境 Yii 2 PHP 5 4 45 版本 IIS 10 0 Windows 10 In login php LoginForm php and SiteController php我添加了以下内容
  • Android Textview 文本在底部被截断

    所以我有 2 个文本视图 一个在另一个之上 但是当填充第二个文本视图时 剪切会在底部被切断 标题为 header subtitle 的文本视图存在相关问题 显然我错过了一些明显的东西 但不知道是什么 Issue https i stack
  • 显示大于设备屏幕的图像

    我想在不调整图像大小的情况下显示比设备屏幕更大的图像 它必须位于屏幕中央 我怎样才能做到这一点 将滚动视图与图像视图一起使用并设置该滚动视图的高度 Example
  • 用于执行“Between”的 Linq 表达式

    在 SQL 中 您可以编写一个查询 在 nvachar 类型的列上执行 Between 并简单地返回指定的最小值和最大值之间的所有行 例如 Table Id Int Name nvarchar Contents 1 Annie 2 Bill
  • Matplotlib 为重叠的艺术家选择事件顺序

    我在 matplotlib pick 事件中遇到了一个非常奇怪的问题 我有两位艺术家 他们都是可选择的并且一开始就不重叠 洞 和 钉子 当我选择其中之一时 在事件处理过程中我move另一个到我刚刚点击的位置 将 钉子 移动到 洞 中 然后
  • Range.Find 在 VBA Excel 中不区分一月和十一月(二月和十二月)

    假设我有以下琐碎的任务 连续写出 2016 年 1 月到 2018 年 6 月的第一个日期 找到 01 Janu 2016 并将其涂成红色 Use Range Find 因此 我创建了一个代码 从 1 循环到 30 并写入每个月的第一个日期