VBA 脚本导致 Excel 在 15 次循环后没有响应

2024-04-11

我正在运行一个脚本来查找并删除包含 2018 年之后数据的行。我正在搜索大约 650000 行。每次我在 5 秒后运行脚本时,光标都会变成旋转的圆圈,并且 Excel 程序变得无响应。这是我正在使用的代码。

Option Explicit
Option Base 1 'row and column index will match array index

Sub removeWrongYear()

Dim i As Long, yearA As Long, rowsCnt As Long
Dim rowsToDelete As Range
Dim vData As Variant

With ActiveSheet

    '1st to 635475 row, 20th column
    vData = Range(.Cells(1, 20), .Cells(635475, 20))

    For i = UBound(vData) To 2 Step -1
       If Val(Right(vData(i,1),2)) > 17 Then
        Debug.Print Val(Right(vData(i,1),2))
            rowsCnt = rowsCnt + 1

            If rowsCnt > 1 Then
                Set rowsToDelete = Union(rowsToDelete, .Rows(i))
            ElseIf rowsCnt = 1 Then
                Set rowsToDelete = .Rows(i)
            End If

        End If
    Next i

End With

If rowsCnt > 0 Then
    Application.ScreenUpdating = False
    rowsToDelete.EntireRow.Delete
    Application.ScreenUpdating = True
End If

End Sub

每次我在 5 秒后运行脚本时,光标都会变成旋转的圆圈,并且 Excel 程序变得无响应。

这很正常。 VBA 运行在单个可用的 UI 线程上,与 Excel 运行的线程相同。当它正忙于运行循环时,它无法respond到其他刺激,并告诉您通过在标题栏中输入“(不响应)”,直到它完成工作并能够恢复执行它需要执行的所有其他操作(即侦听鼠标和键盘消息等) 。

你可以添加一点DoEvents在该循环的主体中,允许 Excel 在迭代之间呼吸并处理待处理消息,但有一个问题:首先,您的代码将需要更长的时间才能完成,其次,如果用户能够选择/激活另一个工作表循环的中间,然后这个不合格Range call:

vData = Range(.Cells(1, 20), .Cells(635475, 20))

...将成为运行时错误 1004 的根源,因为你不能这样做Sheet1.Range(Sheet2.Cells(1,20), Sheet2.Cells(635475,20))并期望 Excel 知道如何处理(假设Sheet2循环开始时处于活动状态,并且用户激活Sheet1在它的中间)。

这个答案 https://stackoverflow.com/a/49015509/1188513提供了最有效的方法来有条件地删除行a lot涉及行数。如果可以的话,添加一个辅助列来计算您的标准(例如,使其返回TRUE要保留的行和FALSE用于要删除的行),然后使用Worksheet.Replace and Worksheet.SpecialCells执行过滤和删除:

.Columns("Z:Z").Replace What:=False, _
                        Replacement:="", _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        MatchCase:=False, _
                        SearchFormat:=False, _
                        ReplaceFormat:=False
.Columns("Z:Z").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

那么你就不需要循环了,它实际上可能在你数到 5 秒之前就完成了。

除此之外,长时间运行的操作就是:长时间运行的操作。拥有它:

Application.StatusBar = "Please wait..."
Application.Cursor = xlWait
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

'..code..

Application.Cursor = xlDefault
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.StatusBar = False
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA 脚本导致 Excel 在 15 次循环后没有响应 的相关文章

  • 如何在Excel中识别给定月份的第一,第二等星期一或一周中的其他日期

    我在网上查了一下 但公式看起来很复杂 有什么巧妙的建议吗 例如 我需要一个公式来确定哪个日期是 2014 年 8 月的第一个星期一 类似于第二个星期一的使用 等等 谢谢 一般来说 你可以找到n 第一个x给定的一天M and Y用这个公式 D
  • Excel 工作表到 iPhone 数据 -- A 点到 B 点

    尽可能简单 我有一个非常简单的 Excel 电子表格 只有 1000 多条记录 我想将其用作 iPhone 应用程序的静态数据源 最好的进攻计划是什么 我心中的可能性 1 直接读取XLS作为数据源 是否有Obj C库用于此 2 将XLS 转
  • Excel 在“.xls”中发现不可读的内容。同时导出水晶报表到excel

    我正在将数据从 Crystal 报告导出到 PDF 工作正常 并显示所有记录 但是当我将其导出到 Excel 文件中并成功导出时 以及当我在 Excel 中打开它时给出错误消息 文件错误 数据可能已丢失 当我点击 确定 按钮时 在 Exce
  • 我需要代码在两行之间复制并粘贴到另一张表中,并给出任何值?

    例如 我有 50 行数据 第一行有学生的名字 我需要代码将数据从 RAM 复制到 RAMESH 在这之间我有 20 行 我需要代码来复制行并将其粘贴到另一张纸中 它不应该问我名字 默认情况下 它必须采用 RAM 和 RAMESH 名称 好的
  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • 如何在未安装 Office 的情况下以编程方式创建、读取、写入 Excel?

    我对所有读取 写入 创建 Excel 文件的方法感到非常困惑 VSTO OLEDB 等 但它们都seem具有必须安装office的要求 这是我的情况 我需要开发一个应用程序 它将以 Excel 文件作为输入 进行一些计算并创建一个新的 Ex
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • 查找并替换目录中所有 Excel 文件工作簿中的字符串

    我正在编写 VBA 代码来替换位于特定目录中的多个 Excel 文件 工作簿 中的特定字符串 我尝试在 Stack Overflow 上搜索 找到答案 但这与通过 Excel 中的宏替换文本文件中的字符串有关 相同的链接是查找并替换文件中的
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • 复制一张工作表上的静态范围,然后根据单元格中的单个值粘贴到另一张工作表中的动态范围

    我对这个问题分为三个部分 我在 Sheet1 A1 中有一个带有周数的单元格 我在 Sheet1 B1 F1 中有一个需要复制的静态范围 然后 我需要将该值粘贴到 Sheet2 中的动态范围中 偏移量为行的周数 这是我正在为我经常使用的工作
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显

随机推荐

  • 用于方形图像的 Google 自定义搜索 API

    我正在寻找一种方法来指定 Google 自定义搜索 API 返回的图像具有方形格式 我尝试过 tbs iar s 因为我读过使用自定义搜索 API REST JSON 搜索方形图像 https stackoverflow com quest
  • 如何从行索引 Swift 获取索引路径

    我正在加载一个数组UIcollectionview 稍后会添加其他数据 我想随机选择集合视图项目 var indexpath Int arc4random uniform UInt32 items count 1 self collecti
  • 删除非英文字符 PHP

    我如何解析字符串以删除 php 中的所有非英文字符 现在我想删除类似的东西 谢谢 str preg replace 00 255 u str
  • 是否可以使用 jquery 为每一行文本添加动画?

    jquery 是否可以一次显示一行文本 我知道它可以在闪存中完成我这里有一个例子http iliketoplay dk blog deff http iliketoplay dk blog deff 在播放视频时 鼠标单击一个圆圈 将打开一
  • 使用 EF Core 继承时如何避免重复属性投影?

    我正在努力解决如何在使用时避免重复投影逻辑EF Core 中的继承 https learn microsoft com en us ef core modeling inheritance 这是我的情况 我有三种类型 Lesson 这是一个
  • 可以在单个 PHP 脚本中使用多个独立的 $_SESSION 吗?

    我想在单个 PHP 脚本中使用两个独立的 SESSION 我尝试使用以下代码验证这是否可行 error reporting 1 session name session one session start SESSION array SES
  • 如何使用 Node.js 标记 Markdown?

    我正在构建一个 iOS 应用程序 该应用程序的视图将从 Markdown 中获取其来源 我的想法是能够将 MongoDB 中存储的 markdown 解析为 JSON 对象 如下所示 h1 This is the heading p Her
  • 如何使用Qt中的QSyntaxHighlighter类在QML TextEdit上实现富文本逻辑?

    我的 QML 文件中有一个 TextEdit 并且有一个 QSyntaxHighlighter C 类 我想在 C 类中指定突出显示逻辑并将其应用到 TextEdit 但我不确定如何在 QML 对象和 C 类之间建立连接 您还可以提供一些示
  • Symfony2 表单事件 PreSetData 订阅者

    在我的应用程序中 用户可以为某些实体创建自定义字段 然后在显示表单时为每个实体对象设置此自定义字段的值 实现是这样的 1 我为表单创建了一个接口 并且我想要实现该接口的表单 2 我为所有表单创建了一个表单扩展 app core form b
  • 如何在 python 中使用网址下载文件?通过浏览器下载可以,但不能通过python的请求下载

    如果在浏览器 Firefox Chrome 等 中输入 URL 则会下载该文件 但是当我尝试使用 python 下载相同的文件 使用相同的 URL 时requests or urllib图书馆 我没有得到任何回应 URL https www
  • 用例可以没有参与者吗?

    我正在研究全自动系统的用例图 外部系统只会触发该系统的一个用例 大多数其他用例都是计划任务并由计时器调用 我有一个由计时器调用的用例 它包含并扩展了其他两个用例 当我编写用例描述时 谁将成为 UC 2 和 UC 3 的参与者 用例可以在没有
  • 无法销毁多对多关系中的记录

    我是 Rails 新手 所以我确信我犯了一个简单的错误 我在两个模型之间建立了多对多关系 User and Group 它们通过连接模型连接GroupMember 这是我的模型 删除了不相关的内容 class User lt ActiveR
  • WCF 和多主机标头

    我的雇主网站有多个主机名 它们都访问同一服务器 我们只是出于品牌目的显示不同的皮肤 不幸的是 WCF 在这种情况下似乎不能很好地工作 我试过了使用自定义主机工厂覆盖默认主机 http www robzelt com blog 2007 01
  • 具有可变动作的强化学习

    All the 强化学习 http en wikipedia org wiki Reinforcement learning我读过的算法通常应用于具有固定数量操作的单个代理 是否有任何强化学习算法可以在考虑可变数量的动作的同时做出决策 例如
  • sp_executesql 导致我的查询非常慢

    我在数据库表上运行 sp executesql 时遇到一些问题 在本例中 我使用 ORM NHibernate 生成一个查询一个表的 SQL 查询 该表大约有 700 万条记录 并且索引很高 当我运行 ORM 在没有 sp executes
  • 使用 xml 资源创建 ArrayAdapter 并使用微调器检索“id”或“value”字段

    我正在尝试创建一个微调器 我使用 ArrayAdapter 从资源 xml 填充其值 我还想给资源项一些 id 或 value 我如何在 onItemSelected 回调中检索这些值 这是 Java 代码 package com waus
  • struts2中如何使用$.ajax()方法

    大家好 我正在使用 struts 2 和 jquery 插件 1 8 现在我在谷歌上搜索使用 ajax struts中的方法 但我认为我没有输入正确的关键字 任何人都可以给我一个教程 我们如何使用 struts 使用此函数并将响应作为字符串
  • 如何在 yii 中的 CGridview 中显示相关表的数据

    我正在尝试使用 CGridView 显示结果 我有两张桌子Users and products 出口产品是维护 then 之间的多对多关系的表 并让关系名称为 myrelation public function actionSearch
  • 在R中,如何制作箱线图?

    我的输入表有两列 如下所示 x y 1 187 2 235 3 857 3 253 2 955 1 267 我想为每个单独的 x 值绘制 y 值的箱线图 x 值限制为 1 2 3 这是我的 R 代码 data read table inpu
  • VBA 脚本导致 Excel 在 15 次循环后没有响应

    我正在运行一个脚本来查找并删除包含 2018 年之后数据的行 我正在搜索大约 650000 行 每次我在 5 秒后运行脚本时 光标都会变成旋转的圆圈 并且 Excel 程序变得无响应 这是我正在使用的代码 Option Explicit O