强制 VBA 等待 Power Pivot 完成刷新

2023-12-09

我在 VBA 中遇到了一个非常不寻常的错误,我已经为此苦苦挣扎了两天。我有一个代码,可以更新要在 Active-x 下拉列表中显示的值,然后使用ListFillRange财产。 不幸的是,每次我运行它时都会产生错误。我认为该错误是由于在电源枢轴上运行一段代码引起的,我在完成刷新之前正在刷新该代码。错误发生在 lastRow 函数的第 9 行,该函数选择 Power Pivot 中的一个单元格。注释掉第 5 行后,该错误不再出现Sub这会刷新数据透视表。 我想这个问题的解决方案是强制 VBA 等待代码的下一步,直到表刷新完成。我尝试通过添加来解决这个问题DoEvents以及我在网上找到的其他一些技术,但没有一个起作用。任何有关解决此问题的建议将不胜感激。谢谢!

Sub updateList()
Dim listRangeEnd As Long

'Refresh pivot with all Promotion Weeks
'Clear all filters
Worksheets("Lookup").PivotTables("weeksList").ClearAllFilters
'Refresh pivot
Worksheets("Lookup").PivotTables("weeksList").RefreshTable


'Set listFillRange for the list
listRangeEnd = lastRow("Lookup", "D4")
Worksheets("Inputs").list.ListFillRange = "Lookup!D4:D" & listRangeEnd
Worksheets("Inputs").list.Value = Worksheets("Lookup").Range("D4").Value

End Sub


Public Function lastRow(sheet As String, Cell As String)
Dim Row As Long
Dim currentSheet As String

'Save the name of the currently selected sheet
currentSheet = ActiveSheet.Name

'Get the row number of the last non-empty cell in the column
Worksheets(sheet).Select
Worksheets(sheet).Range(Cell).Select
If Selection.Offset(1, 0).Value = "" Then
    Row = ActiveCell.Row
Else
    Row = Worksheets(sheet).Range(Cell).End(xlDown).Row
End If

'Go back to the previous sheet
Worksheets(inputSheet).Select

lastRow = Row

End Function

善良的圣母,我已经明白了。

这不是一个完美的解决方案,可能有点慢,但至少它有效。

有人(我最终会)应该能够改进它,以便它可以处理多单元格范围。本质上它会等待每个单元格依次完成计算。看来我们使用的大多数 PP 查找公式都会分批完成,因此只需要每批中的一个单元格进行测试。它相当有效,但它绝对可以利用优化。当我改进它时我会回复。

Option Explicit
Option Compare Text

Function PP_Calcs_Finished() As Boolean
'v9.00 2016-11-28 10:39 - added PP_Calcs_Finished
'test for PowerPivot calculations to be completed

'tests any range names starting with prefix "PP_test_" to look for #GETTING_DATA in cell text
    Const cPPwait As String = "#GETTING_DATA"
'choose various cells in workbook and label ranges with prefix "PP_test_" to be checked for completion
    Const cPPprefix As String = "PP_test_"
'runs itself once per sRepeat seconds until test completes, this allows calcs to run in background
    Const sRepeat As Byte = 2
'Result: True means OK, False means not OK


Application.StatusBar = "PLEASE NOTE: readjusting lookups and formulas in the background, please be patient..."

'ensure calculations are automatic
Application.Calculation = xlCalculationAutomatic
Dim nm As Name, test_nm() As Name, n As Integer, nmax As Integer, ws As Worksheet

'find all test ranges
nmax = 0
'workbook scope
For Each nm In ThisWorkbook.Names
    If Left(nm.Name, 8) = cPPprefix Then
        nmax = nmax + 1
        ReDim Preserve test_nm(1 To nmax) As Name
        Set test_nm(nmax) = nm
    End If
Next nm
'worksheet scope
For Each ws In Worksheets
    For Each nm In ws.Names
        If Left(nm.Name, 8) = cPPprefix Then
            nmax = nmax + 1
            ReDim Preserve test_nm(1 To nmax) As Name
            Set test_nm(nmax) = nm
        End If
    Next nm
Next ws

'now test all ranges
Dim sSheetName As String, sRangeName As String
If nmax > 0 Then
    For n = 1 To nmax
        sSheetName = Mid(test_nm(n).RefersTo, 2, InStr(1, test_nm(n).RefersTo, "!") - 2)
        sRangeName = Mid(test_nm(n).RefersTo, InStr(1, test_nm(n).RefersTo, "!") + 1, 500)
        If Worksheets(sSheetName).Range(sRangeName).Cells(1).Text = cPPwait Then
        'still waiting, quit and test again in sRepeat seconds
            Application.OnTime Now + TimeSerial(0, 0, sRepeat), "PP_Calcs_Finished"
            Exit Function
        End If
    Next n
End If
Application.StatusBar = False
PP_Calcs_Finished = True
'Application.Calculate
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 VBA 等待 Power Pivot 完成刷新 的相关文章

  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • 如何使用 C# 在 MS Excel 单元格中添加数字验证

    我的目标是限制用户在 MS Excel 单元格中仅输入 1 到 100 范围内的值 我正在以编程方式生成 Excel 文件 但是当我添加上述验证时 抛出异常Exception from HRESULT 0x800A03EC 我写的代码如下
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • 关闭工作簿时删除范围,xls vba

    我想要范围 Range A2 G z 关闭工作簿时删除 有人可以帮我处理代码吗 谢谢 凯 这就是我尝试过的 Option Explicit Sub Makro1 insert clipboard Workbooks Pfl SchutzSt
  • Excel 中使用通配符 {*} 进行 Vlookup

    我有下表 现在 我想检查主题是否具有数据中存在的任何文本 col F I used VLOOKUP A2 F F 1 0 但它正在给予 N A Try 公式为B2 SUM COUNTIF A2 F 2 F 3 gt 0 Edit SUM C
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • VBA全局类变量

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

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 如何从 Outlook 的“收件人”字段中提取电子邮件地址?

    我在某种程度上一直在使用 VBA 使用以下代码 Sub ExtractEmail Dim OlApp As Outlook Application Dim Mailobject As Object Dim Email As String D
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • 正在使用的 VBA 监视文件

    我正在寻找一些东西 Win API 调用或其他 来在文件可供编辑 即不再使用 时通知我 我应该设置一个计时器来按一定时间间隔检查文件还是有一个好方法对文件设置监视 FileSystemWatcher 没有帮助 Win32 FindFirst
  • 使用 C# 在 Excel 中查找和替换文本

    我想使用 C 在 Excel 中查找并替换一组文本 而且我希望此替换仅发生在第一行中的文本 我已经使用Google并找到了一些付费资源 例如Aspose API Spire Xls等 但我正在寻找开源资源或任何其他有效的方法来实现这一目标
  • 在 Python 中绘制 Excel 中的数据

    我必须从 Excel 文件中读取和绘制数据的代码是这样的 import pandas as pd import matplotlib pyplot as plt excel file file1 xlsx file1 pd read exc
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • Excel宏隐藏特定单元格和合并区域

    我试图根据另一个单元格的值隐藏特定单元格 到目前为止 我设法隐藏整行 但无法隐藏特定单元格 Local Currency value show hide item If Range Currency Value USD Then Range
  • 使用 FileSystemObject 读取和写入 csv 文件

    是否可以使用 VBA 中的 FileSystemObject 读取和写入 csv 文件 必然是 基本语法如 Set objFSO CreateObject scripting filesystemobject create a csv fi
  • Excel,循环遍历 XLSM 文件并将行复制到另一个工作表

    我现在遇到的此代码的主要问题是处理我打开的 xlsm 文件的错误 我对这些文件的 VB 代码没有编辑权限 如果 vb 出错 有没有办法跳过文件 我有一个包含大约 99 个 xlsm 文件的文件夹 我希望循环遍历每个文件并复制每个工作簿中的第
  • 如何根据文本框值过滤列表框值

    我在用户窗体上有一个文本框和一个列表框 我想根据我在文本框中输入的值过滤列表框中的值 名为 TMP 的工作表具有值 我根据文本框更改事件对其进行过滤 但在将该值添加到列表框中时它 会自动退出 Private Sub Textbox1 Cha
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res

随机推荐

  • Codeigniter 3 中禁止 POST url 403

    您好 专家们 您能给我一个建议吗 为什么我在当前在本地主机上运行的代码点火器上收到此 403 禁止消息 403 禁止 过程是这样的 我使用 ajax 来轻松 顺利地访问和检索从模型 控制器到视图的数据 下图是我在视图到控制器中的代码 div
  • Python:如何在其他函数中使用一个函数中的命名变量

    我是一名新手程序员 试图使用 Python 3 3 2 编写一个程序 该程序具有main 调用的函数function1 然后循环function2 and function3 我的代码通常如下所示 def function1 print h
  • 阻止禁用用户 firebase 规则

    我不确定这是否有效 但我想知道如果用户已被禁用 是否可以在规则中阻止存储 firestore 读 写 这可能吗 上下文 auth 禁用 或者我是否只需要等待令牌过期 用户就被拒绝访问 禁用用户意味着他们无法再登录 也无法刷新其 ID 令牌
  • python 字符串搜索替换

    SSViewer set theme bullsorbit 这是我的绳子 我想在字符串中搜索 SSViewer set theme bullsorbit 并替换 bullsorbit 用另一根绳子 bullsorbit 字符串是动态变化的
  • IE8 内部 HTML 错误

    这个innerHTML代码在IE8中不能可靠地工作 但正在 IE6 IE7 FF Opera Chrome Safari 中工作 通过不可靠地工作 我的意思是我已将此代码放置在各种元素上的 onmouseover 处理程序中 有时当鼠标悬停
  • 表单嵌套在表中时的 jQuery 表单提交

    是否有原因导致表单无法在表内使用 jQuery 提交 或者我只是做错了什么 我已经在表格外测试了表单提交 然后当我将其包装在表格内时 它就停止工作 即使我添加了额外的parent 来弥补上方移动的形式 td 代码中的元素 有人可以帮我解决这
  • AJAX 响应在 C++ 中无效,但在 Apache 中无效

    我想制作一个用 C 编写的服务器来支持我的游戏 我学习了套接字的基础知识 并编写了一个运行良好的基本聊天程序 现在我想创建一个像 Apache 一样的 HTTP 服务器 但仅限于 AJAX 请求响应部分 我想一开始我复制了一个 Apache
  • Rails 3 + PDFKit 问题:权限被拒绝 (Errno::EACCES)

    我想用PDFKit在我的 Rails 3 应用程序中在 Windows 上 我安装了wkhtmltopdf和pdfkit gem 这是我用来创建 PDF 的代码 class JobsController lt ApplicationCont
  • 如何创建 POI Word 格式的电子邮件链接

    如何在电子邮件中创建外部链接或电子邮件链接XWPF文档 有一个描述Excel HSSF XSSF 但我还没有找到与 Word HWPF XWPF 类似的内容 public void example throws Exception XWPF
  • Android Studio:测试:使用 java 8 或更高版本编译的库依赖项

    请帮忙 我在为 android studio 设置测试时经历了一段非常糟糕的时光 我已经从 cucumber github 下载了计算器示例来练习 cumcumber 代码测试 https github com cucumber cucum
  • Pepper 机器人:上传 python 模块

    我正在编程一个辣椒机器人 with 编舞我正在使用一个真正的机器人 我遇到的问题是如何将 python 模块安装到机器人上 因为我需要使用requests包进行 API 调用 我一直在互联网上浏览 但没有找到任何解决方案 出于安全原因 根访
  • 如何从直线访问Metastore?

    我需要做一些 SQL 查询 如here 直接来自 Metasore PS 命令 SHOW DESCRIBE 是not足够的 如何启用它作为数据库的访问 或者 Metastore 的数据库名称是什么 现在 2019年 有可能吗 NOTES W
  • 覆盖/修改 Rails 类 (ActiveResource)

    我现在一直在努力解决 ActiveResource 的问题 当主机名解析 ActiveResource 请求 但另一端没有服务器返回信息时 ActiveResource 的超时值不起作用 请求只是挂起 在查看 ActiveResource
  • Windows 命令提示符下 Python 3.6 中的模块未找到错误

    我创建了一个如下项目 project package1 init py module1 py package2 init py module2 py 我想将 module1 导入到 module2 中 from package1 impor
  • 如何在 Ansible 中交替替换多个列表的元素?

    我有多个列表作为输入 所有列表都具有相同的长度 但输入可以有超过 3 个列表 我想创建一个列表 它是所有交替其元素的输入列表的总和 例如 给定以下输入 data 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 我期待
  • ByteBuffer.asCharArray().array() 上出现 UnsupportedOperationException

    有人能好心解释一下为什么在下一行我有 UnsupportedOperationException 吗 System out println ByteBuffer wrap new byte t e s t n asCharBuffer ar
  • RxJS 排队相关任务

    如果我有一个像这样的数组数组 parent name stu children name bob name sarah 我想循环遍历每个父级并依次循环遍历它们的子级 这样我就不会启动下一个父级 直到所有子级都已处理完毕 一些漫长的异步过程
  • 为什么 System.Windows.Forms.Control MousePosition 属性可以读取,但 Location 属性不能读取?

    我从某个网站复制了这个 PowerShell 代码 它显示了鼠标的当前位置 Reflection Assembly LoadWithPartialName System Windows Forms Out Null control Syst
  • 在 php 中压缩数据并在 javascript 中解压缩 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 大家好 有没有办法压缩从 php 服务器 发送的数据 然后使用 javascript 客户端 解压缩数据 感谢您 我必须同意 Domenic 的回答 Nishchay Sharm
  • 强制 VBA 等待 Power Pivot 完成刷新

    我在 VBA 中遇到了一个非常不寻常的错误 我已经为此苦苦挣扎了两天 我有一个代码 可以更新要在 Active x 下拉列表中显示的值 然后使用ListFillRange财产 不幸的是 每次我运行它时都会产生错误 我认为该错误是由于在电源枢