TL; DR ————— 如果我正确地声明初始化脚本中的variables,我不能附加到SAPFEWSELib.GuiApplication的“连接”对象。 集合MyApplication.Children(0)是空的,但是如果我注释掉声明块,它就可以工作! TL; DR ————— 我正在尝试在我的SAP客户端和我的Excel应用程序之间创build一个更可靠的连接。 我目前的问题是build立连接。 SAP客户端在使用其脚本loggingfunction时提供一个示例vbscript。 If Not IsObject(MyApplication) Then Debug.Print "yep" Set SapGuiAuto = GetObject("SAPGUI") Set MyApplication = SapGuiAuto.GetScriptingEngine End If If Not IsObject(Connection) Then Set Connection = MyApplication.Children(0) End If If Not IsObject(session) Then Set session = Connection.Children(0) End If 这个在stackoverflow上的其他问题接近答案,但倒下了stackoverflow.com/questions/24738998/vba-using-variables-that-were-not-declared 原来的代码在这里 ,我已经稍微修改,所以它可以在Excel / VBA的工作。 (我删除了IsObject(Wscript),我不得不用MyApplicationreplaceApplication) 我想要做的第一件事是显式声明所有的variables。 使用代码我得到了以下地址stackoverflow.com/questions/19783180/get-list-of-all-properties-for-an-object我用“TypeLib信息”和函数TypeName()来确定每个对象types。 […]
我期待在一个相当大的Excel插件上开始自动化回归testing,这个插件围绕着一个由几个带有标准控件的模式用户窗体组成的GUI进行。 主要的问题是我所研究过的大多数自动化testing工具(Rational Robot ,AutomatedQA TestComplete ,networking自动化自动化等等)并不完全支持VBA控件,所以他们的testing最终会重放鼠标点击和按键,真的可以维持。 理想情况下,我需要一个识别VBA表单控件的testing工具,所以我可以说“按下这个button,等待这个列表框改变”,而不是“点击(237,58)并等待500毫秒”。 我还考虑将testing自动化作为VBA构build到外接程序中,但大部分用户的时间都花费在与模式对话框交互,从而阻止VBA在后台运行,所以这几乎是不可能的。 我的问题 – 这里有没有人有一个自动化testing工具的经验 a)识别VBA用户表单控件并可以可靠地与它们交互 b)支持使用条件分支和成功/失败logging的testing脚本,而不仅仅是logging和回放? 或者,有没有人知道一种方式,我可以解决暂停VBA执行的modal dialog的问题,所以我可以从VBA内驱动加载项? 我花了一段时间四处看看QA论坛,但没有发现任何东西,所以任何帮助或线索将不胜感激。 谢谢你的帮助, -Martin
我创build了一个工作表,我的同事之间共享一个真正的macros来显示/隐藏行,但每次我或我的一个同事打开它,他们会被提示允许marco – 有无论如何他们永远允许这个macros?
我正在使用Application.Ontime事件从单元格拉出一个时间字段,并安排一个子程序在那个时候运行。 我的Application.Ontime事件在Workbook_BeforeSave事件上运行。 因此,如果用户(更改所需时间+保存工作簿)多次,则创build多个Application.Ontime事件。 理论上我可以跟踪每个事件的唯一时间variables..但有没有办法检查/parsing/取消未决事件? Private Sub Workbook_BeforeSave SendTime = Sheets("Email").Range("B9") Application.OnTime SendTime, "SendEmail" End Sub Private Sub Workbook_BeforeClose Application.OnTime SendTime, "SendEmail", , False End Sub 所以如果我: 将B9更改为12:01,保存该工作簿 将B9更改为12:03,保存该工作簿 将B9更改为12:05,保存该工作簿 将B9更改为12:07,保存该工作簿 等等 我结束了多个事件发射。 我只想要一个事件(最近预定的) 如何取消Workbook_BeforeClose事件上的所有未决事件(或至less枚举它们)?
我有一个传统的Excel电子表格,通过在VBA中编写的Excelmacros执行很多function。 我在哪里可以find这些对象,方法和类似的文件? 就像T-SQL或C#上的微软文档一样。 例如,我有这样的代码: With DialogSheets("string") .EditBoxes("otherstring").property End With 我在哪里可以findDialogSheet对象或.EditBoxes方法的文档? “Microsoft Visual Basic”中的对象浏览器甚至不显示返回types的方法。 在这种情况下,它显示 函数EditBoxes([Index])作为Excel.DialogSheet的对象成员 和Excel对象模型参考 MSDN文档没有一个DialogSheet或Excel对象。 那我在哪里可以find有用的文档?
有人可以帮我一些VBA代码。 我试图在工作簿之间复制2个单元格范围(这两个工作簿应该事先创build,因为我不想让代码在运行中创build新的工作簿)。 首先,我需要复制这些范围 – 从booka.xls的“工作表3”,范围:单元格H5到列H中的最后一行,将数据复制到bookb.xls的“工作表1”,从单元格B2开始, B列的细胞 其次,我需要复制这些范围 – 从booka.xls的“工作表3”,范围:单元格K5到列K中的最后一行,将数据复制到bookb.xls的“工作表1”,从单元格D2开始,细胞向下在D列 这是我到目前为止: Sub CopyDataBetweenBooks() Dim iRow As Long Dim wksFr As Worksheet Dim wksTo As Worksheet wksFr = "C:\booka.xls" wksTo = "C:\bookb.xls" Set wksFrom = Workbooks(wksFr).Worksheets("Sheet 3") Set wksTo = Workbooks(wksTo).Worksheets("Sheet 1") With wksFrom For iRow = 1 To 100 .Range(.Cells(iRow, 8), .Cells(iRow, 9)).Copy wksTo.Cells(iRow, 8) Next […]
我想用vba从pdf文件中提取表格,并将它们导出为excel。 如果一切按其应有的方式进行,应该全部自动进行。 问题是表格不规范。 这是我迄今为止。 VBA(Excel)运行XPDF ,并将当前文件夹中find的所有.pdf文件转换为文本文件。 VBA(Excel)逐行读取每个文本文件。 和代码: With New Scripting.FileSystemObject With .OpenTextFile(strFileName, 1, False, 0) If Not .AtEndOfStream Then .SkipLine Do Until .AtEndOfStream //do something Loop End With End With 这一切都很好。 但现在我正在从文本文件中提取表的问题。 我想要做的是VBAfind一个string,例如“Year's Income”,然后将数据输出到列中。 (在表格结束之前) 第一部分不是很困难(find一定的string),但是我将如何去做第二部分。 文本文件看起来像这个Pastebin 。 问题是文本不规范。 因此,例如一些表格有3年的列(2010 2011 2012)和一些只有两个(或1),有些表格在列之间有更多的空间,有些不包括某些行(如资本资产,净额)。 我正在考虑做这样的事情,但不知道如何在VBA中去做。 查找用户定义的string 例如。 “表1:几年的回报。” 一个。 下一行find年份; 如果有两个,我们将需要三列输出(标题+,两年),如果有三个,我们将需要四个(标题+,三年)..等 湾 为每年创build标题栏+列。 到达行尾时,转到下一行 一个。 阅读文本 […]
我正在使用CopyFromRecordset方法从ADODBlogging集更新Excel表。 更新后,数字显示为有数字列的date。 我到目前为止使用的解决方法是通过VBA将列格式化为数字,但这不是一个好的解决scheme,因为需要花费更多时间来完成报告。 此外,我必须编写代码来容纳很多表。 有一个快速解决? 任何帮助是极大的赞赏。 'Delete old data and copy the recordset to the table Me.ListObjects(tblName).DataBodyRange.ClearContents Me.Range(tblName).CopyFromRecordset rst tblName – 引用一个现有的表,它保存与第一个数据相同格式/数据types的数据
我可以看到WindowActivate事件发生,在各级,当我在Excel中切换窗口,但有没有办法引发事件时,Excel成为前台应用程序? 如果我点击Excel的工作,例如在浏览器中的一段时间,然后点击回到Excel窗口,我没有看到任何事件触发。 有什么办法可以检测到吗? 我想刷新我的VBA应用程序的一些元素,因为偶尔我发现基于超文本function的鼠标移动function失去了激活图表的能力。 我可以通过取消保护和保护工作表来解决这个问题,或者通过废弃和重新初始化我的对象的一个子集来解决这个问题。 我想在我正在寻找的事件上触发此操作。 我也可以通过SendKeys做到这一点,但它不是很好,因为它由于SendKeys中logging的错误而消除了键盘设置(例如滚动locking),并且使屏幕闪烁的次数超过了我的意愿。 由于代码将驻留在VBA中,因此我会将操作限制在特定的工作簿中。 如果在进入Excel实例窗口时不同的(被动)工作簿处于活动状态,则不会触发任何操作,并且如果用户select包含该工作簿的工作簿,则可以使用WorkbookActivate事件来刷新应用程序。
我一直在为这一天挣扎。 基本上,我想编写一个Excelmacros来循环在Excel中的列表,查询网页和检索一些数据。 理想情况下,我只是想检索我需要的数据,所以我可以把它放在一个相邻的单元格中,但是现在我可以做任何事情。 页面是ASP.net,我没有经验; 如果它是.php我可能可以pipe理,但我甚至不知道如何通过JavaScript张贴到.aspx。 我可以循环访问数据,一旦获得数据,我就可以将其写入excel,所以有两个部分我正在努力: 第1部分 – 查询网页 这是我想查询的页面 。 我需要在“ Property Addresssearch并从结果中检索数据。 我用这个例子的地址是400 W Church St 我认为可能很简单,提交一个像“… / ParcelSearch.aspx?name = …&value = …”,但没有骰子。 第2部分 – 抓取数据 在结果上,有一个表DetailsSummary_Master up top,带有由<legend>标签定义的字段集。 我需要<legend>Municipality</legend> : 我不知道该怎么做,通过<td> s循环? 我想也许我可以GetElementByID或可能通过标记,但我似乎无法弄清楚。 VBA 我用了几个SO线程来试图找出迄今为止。 第一 , 第二和第三 ,但我似乎甚至不能正确地开机自检。 我现在保持分开。 这是我的问题(从另一个线程偷来的): Sub SubmitForm() Dim objIE As Object Dim xmlhttp As Object Dim […]