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 中不区分一月和十一月(二月和十二月) 的相关文章

  • Javascript 中的 OADate 到毫秒时间戳

    我尝试做与以下完全相反的事情 JavaScript 中 DateTime ToOADate 的等效项是什么 https stackoverflow com questions 7348805 what is equivalent of da
  • PHP 中给定日期的下一个工作日

    有人有一个 PHP 代码片段来计算给定日期的下一个工作日吗 例如 需要如何转换 YYYY MM DD 才能找到下一个工作日 例子 对于 03 04 2011 DD MM YYYY 下一个工作日是 04 04 2011 对于 2011 年 4
  • 使用 LAMBDA 在 Excel 中生成所有排列

    这是一个经常被问到和回答的问题 如何在 Excel 中生成所有排列 2011 https stackoverflow com questions 5724373 permutations in excel 2016 https stacko
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • Office 365 中 Excel 中 Power Pivot 的计算列中正确的 DAX GROUPBY 语法是什么

    将以下语法输入到下面在 Excel Office 365 版本 的 powerpivot 中提供的表 Visits 的计算列公式中 GROUPBY Visits Patient Name First Visit Date MINX CURR
  • 删除 VBA 按钮集合

    我正在使用以下脚本在 Excel 中生成按钮 范围正是我希望放置它的位置 Sub CreateAddButton rng As Range Dim btn As Button With Worksheets User Set btn But
  • 用于获取下周一(或一周中的任何一天)的日期的 Ruby 代码

    给定一个输入 例如 day Monday 我如何计算下一次的日期day def date of next day end require date def date of next day date Date parse day delta
  • 有没有办法使用 Python Pandas 读取所有行,直到遇到空行

    我在 Excel 中有很多行 并且这些行在空行之后填充有垃圾值 有没有办法使用 Python pandas 只读取 Excel 中第一个空行之前的记录 我不知道 read excel 是否可以做到这一点 如果您从 Excel 导入空行 这些
  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 勾选或取消勾选复选框时输入时间戳

    我有一个 3 行 7 列的工作表 A1 G3 A 和 B 列有 6 个复选框 A1 B3 A 列和 B 列中的框分别链接到 C 列和 D 列 E 列和 F 列中的单元格只是分别复制 C 列和 D 列 实时E1细胞是 C1 and F3细胞是
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Excel VSTO 工作簿新活动

    在 Excel 2007 的一个 Excel 插件项目中 我需要检查创建新工作簿的事件 我还需要捕捉 Workbook Open 事件 我很容易做到这一点 在我在互联网上的研究中 我发现了以下内容 打开任何工作簿时都会引发 Applicat
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 溢出范围:将数组转换为与 @ 的交集值

    在 Excel 引入溢出范围之前 在 运算符 可以使用 将范围 转换 为单个值0 数值 或 字符串 但 并不完全相同 假设有一列正整数从B4向南 从D2向东有一行正整数 并且 A 列和 C 列以及第 1 行和第 3 行完全是空的 目的是将单
  • 如何从shiny中将数据下载到多张纸上?

    我们如何将数据从 Shiny 下载到多个工作表并命名每个工作表 例如下面 ginberg将mtcars数据保存在sheet1中 我们可以将头部 mtcars 保存在sheet2中吗 另外 我们可以对这些工作表进行不同的命名吗 例如sheet
  • 有 Haskell 日期库吗?

    Haskell 中是否有一个函数允许我输入日期的组成部分 如字符串表示形式或日月年组成部分 我可以从中获取信息 如星期几 一个月中的天等 我在网上查了一下 看起来有很多自定义库 但我希望 ghci 10 6 4 的标准前奏库中有一个没有很好
  • Excel VBA:声明通用对象与指定对象类型之间的区别

    我发现使用声明为的变量出现了意外的 至少对我来说 行为Object在 Excel vba 中 我试图从 html 页面中提取一些数据 所以我使用了这样的例程 sub Test Dim htmlPage As htmlDocument Thi
  • 使用 EPplus 在 Excel 中添加下拉菜单

    我需要帮助 如何使用 Epplus 在 Excel 中添加下拉列表 无需验证 我只需要把它添加到我的模板中 下拉列表中的记录不是动态的 using ExcelPackage p new ExcelPackage ExcelWorksheet
  • PostgreSQL 中的日期比较

    有没有办法比较同一个表中的两个日期 如下所示 SELECT FROM mytable WHERE date 1 date 2 我正在寻找最简单的方法来作为更新语句的一部分来执行此操作 是的 你可以这么做 就那么简单 看看date timeP

随机推荐

  • 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 并写入每个月的第一个日期