Tag: vba

在Excel VBA代码中处理XMLHttp响应中的JSON对象

我需要处理Excel VBA中的XMLHTTPRequest的响应JSON对象。 我写下面的代码,但没有成功。 请指导我 Dim sc As Object Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Dim strURL As String: strURL = "blah blah" Dim strRequest Dim XMLhttp: Set XMLhttp = CreateObject("msxml2.xmlhttp") Dim response As String XMLhttp.Open "POST", strURL, False XMLhttp.setrequestheader "Content-Type", "application/x-www-form-urlencoded" XMLhttp.send strRequest response = XMLhttp.responseText sc.Eval ("JSON.parse('" + response + "')") 我得到错误运行时错误'429'ActiveX组件不能创build对象在行Set sc […]

我如何可以从Excel VBA可靠地写入文本文件?

我正在尝试使用Excel VBA来写入文本文件。 我正在做一些这些: MyFile1 = "C:\outputFromExcel1.txt" fnum1 = FreeFile() Open MyFile1 For Output As fnum1 然后像这样写给他们: Print #fnum1, text 上面的所有variables都是用Dim来声明的。 我正在写数百行文件,而且很less,行被截断 – 即结束被砍掉。 有没有更好的方法写入Excel VBA中的文件? 编辑:我刚刚意识到,它总是被写的最后一行被截断。 所以我想我需要closures或刷新文件?

在VBA中深度复制或克隆ADODBlogging集

我一直在寻找一种在VBA中复制或复制logging集的方法。 而我的意思是,让未确定的数据彼此独立。 我努力了 Set copyRS = origRS.Clone Set copyRS = origRS 当我使用任何方法时,我无法修改一个logging集而不修改其他logging集。 所以在这个例子中: 我创build一个logging集 我用John来填充logging集 我克隆logging集 我修改了克隆的 检查结果 码: Dim origRS As Recordset, copyRS As Recordset Set origRS = New Recordset 'Create field origRS.Fields.Append "Name", adChar, 10, adFldUpdatable origRS.Open 'Add name origRS.AddNew "Name", "John" 'Clone/copy Set copyRS = origRS.Clone 'Change record in cloned/copied recordset copyRS.MoveFirst […]

基准VBA代码

什么被认为是最准确的基准VBA代码(在我的情况下,我在Excel中testing代码)? 除了下面的2之外,还有其他的用于testing代码的技术吗?如果是,那么这个方法的优缺点是什么? 这里有两种stream行的方法。 第一: 计时器 Sub TimerBenchmark() Dim benchmark As Double benchmark = Timer 'Do your code here MsgBox Timer – benchmark End Sub 和Tick (我认为这是最准确的): Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Sub TickBenchmark() Dim Start As Long Dim Finish As Long Start = GetTickCount() 'Do your code here Finish […]

如何将新列添加到现有工作表

假设我有下面的工作表: Empid EmpName Sal 1 david 100 2 jhon 200 3 steve 300 如何插入名为“Loc”的新列,包括其数据? Empid EmpName Loc Sal 1 david uk 100 2 jhon us 200 3 steve nj 300

防止Excel VBA编译错误,因为用户安装了旧版本的MS Office(MS Outlook)?

如果我有一个电子表格,我从VBA编辑器引用了MS Outlook 14.0 Object Library,并且只安装了MS Outlook 12.0的用户,那么当这个用户打开电子表格时,他们会在这一行上得到一个编译错误: Range("export_date") = Date – 1 如果他们进入工具,参考,在参考列表中,有这个错误: MISSING: MS Outlook 14.0 Object Library 如果他们取消select该库,而是select MS Outlook 12.0对象库 …代码然后正确编译和电子表格正常工作。 我不明白为什么在Date()函数上失败,因为这是VBA函数,而不是Outlook函数。 但更重要的是,有没有办法避免这种情况? 我唯一能想到的就是不设置引用,只使用Objecttypes的variables,并通过CreateObject(“Outlook.Application”)等实例化,但是我讨厌放弃强types等等。 任何人都可以提出一个更好的方式来处理这个问题,向后兼容旧版本的MS Office?

如何在VBA Excelmacros中设置unit testing?

我正在一个Excel VBAmacros,将采取一些Excel文件,擦洗/清理它,并产生一张工作簿2张 – 表1是原来的'脏'文件,工作表2是干净的清理文件。 由于我们现在有10种不同的格式,并且在40+以上的路上。我想为给定的一组文件保存这个输出,然后编写一个unit testing,它接受原始input,运行我们的macros,然后比较macros输出到已保存的,预期的输出。 然后在维护之后的任何时候,我们可以快速轻松地运行我们的unit testing,以确保我们不会破坏任何已经工作的东西。 这是我第一次使用VBA。 我search框架或插件,找不到太多的帮助。 我find了一个比较两个excel电子表格的函数 – 所以我把这个部分放在下面。 但是现在我需要弄清楚如何实际编写和执行这个unit testing。 编写unit testing应该非常简单 – 但我该如何执行? 我不想在电子表格上放一个button,说'运行unit testing'…有没有办法在VBA / Excel中运行一个任意函数,所以我可以说右键单击我的UnitTest函数'跑'? 任何关于我的unit testing计划的额外反馈也将不胜感激。 再次感谢。

有趣的符号#

这是什么意思? if CDbl(Trim(Range("M" & r).Text)) > 0# then… #做什么? 和cdbl做什么?

如何将多个Excel列中的数据合并为一列

可以说,我有一个Excel表格,每列有4列数据和20000行数据。 什么是最有效的方式来获取它,这样我把所有的数据整合到一个列中(IE-A列中有80,000行数据,而不是4列中的20,000行数据)。 另外,如何实施该解决scheme。 我的意思是,如果你的解决scheme不是一个“公式”,而是VBA,我该如何实现这个解决scheme? 谢谢!

VBA – Range.Row.Count

我写了一个简单的代码来说明我的困境。 Sub test() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim k As Long k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count End Sub 会发生什么呢?我们对包含从A1开始的值的行进行计数。 如果包含值的行数大于1,则代码工作良好。 但是,如果A1是唯一包含任何值的单元格,则k = 1,048,576,我猜是Excel中允许的最大行数。 为什么不k = 1? 图片: 编辑:我使用的解决方法如下: Sub test() Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Sheet1") Dim k As Long k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count If k = 1048576 Then k […]