Tag: excel vba

Excel 2016触发撤消保存错误?

Excel 2016似乎在保存时触发以编程方式添加撤销级别,这在早期版本的Excel(2013,2010和2007)中不会发生。 要重现这种明显的错误,请打开一个新的工作簿并将其保存为启用macros的工作簿(.xlsm文件)。 将以下代码粘贴到ThisWorkbook模块中: Option Explicit Public WithEvents App As Application Private Sub Workbook_Open() Set App = Application End Sub Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.OnUndo "foo", "modTest.Undo" End Sub 然后,插入一个名为modTest的新模块并粘贴以下代码: Public Sub Undo() MsgBox "This is the Excel 2016 bug." End Sub 最后,保存工作簿并重新打开它。 在任何单元格中input任何值以触发Application.SheetChange事件。 保存工作簿(出于某种原因,您可能需要这样做两次),并且将显示modTest的消息。 任何人都可以解释这里可能会发生什么,和/或如何解决这个问题? 如果这确实是一个错误,那么向Microsoft报告的最好方法是什么? 这个代码是VBA,但是由于这个问题会影响用VB.NET和C#编写的VSTO插件,所以我包含了这些标签。

Excel VBA:工作簿范围,工作表相关的名称公式/命名范围(结果根据活动工作表而变化)

编辑:标题更改为清晰。 快速总结:我想知道工作簿范围,工作表相关的命名公式(我将在下面描述)的行为是Excel中logging的function。 如果是这样的话,请指向某个文档的方向 – 我似乎无法find关于这个在线的任何东西(也许我正在使用坏的search条件..?),而不想使用的东西是实际一个错误,并可能消失在一个更高的版本! 严格地说,这不是一个关于VBA的问题。 然而,命名公式是我和其他人一直在使用的VBA代码 ,所以它仍然适用于我认为的主题。 编辑:请注意,下面的VBA代码可能不完全正确 – 我还没有testing过。 常规方法 对于工程/科学计算,我经常需要在同一工作簿中多次使用相同的命名公式/范围,但在不同的工作表上。 作为一个简单的例子,我可能在圆圈的区域实现这样的事情: Dim sht as Worksheet For Each sht In ThisWorkbook Call sht.Names.Add(Name:="AreaCircle",RefersTo:="=PI()*'" & _ sht.Name & "'!Radius^2") Next sht 其结果是以下一组命名范围/公式(范围为每个工作表): =PI()*Sheet1!Radius^2 <— scoped to Sheet1 =PI()*Sheet2!Radius^2 <— scoped to Sheet2 etc. etc. 这当然很好,但是它有很大的缺点,很难做出未来的改变。 例如,如果公式发生变化(圆的面积当然不会改变!但是,例如AASHTO LRFD公路devise规范中的公式,几乎每一个版本都会改​​变!),我必须编辑每一个实例每一个单一的名称公式。 这很乏味,即使我写一个VBA程序来为我做。 替代方法 我发现Excel 2013中偶然发现了以下内容,并且无法在网上find任何有关它的信息。 这让我犹豫开始使用它。 比方说,我运行下面的一行代码: Call […]

为什么VBA TypeOf操作符在EXCEL中失败

我一直在与Excel 2007问题打了好几天了。 以下是我能想到的所有事实的列表,可能是相关的: IDetailSheet是一个在VBA项目中用几个方法声明的类,它在它的类初始化程序中抛出了一个错误,所以它不能被实例化(使其成为抽象的)。 Option Explicit在所有模块中设置。 VBA项目中的十个工作表实现 * IDetailSheet *并干净地编译(整个项目也一样)。 CDetailSheets是一个在VBA项目中声明的类,它封装了一个Collection对象,并将Collection对象公开为IDetailSheet的Collection。 它还暴露了一些额外的方法来执行所有收集会员IDetailSheet的某些方法。 在其初始化类(从Workbook _ Open事件处理程序调用并分配给全局variables)中, CDetailSheet将执行以下代码以填充专用收集DetailSheets : Dim sht as EXCEL.WorkSheet For Each sht in ActiveWorkbook.Worksheets If TypeOf sht is IDetailSheet Then Dim DetailSheet as IDetailSheet Set DetailSheet = sht DetailSheets.Add DetailSheet, DetailSheet.Name End If Next sht 在某些function区callback中,运行以下代码: If TypeOf ActiveWorkbook.ActiveSheet is IDetailSheet Then Dim […]

所以我的Excel-VBA项目密码可以很容易被破解…什么是其他的select?

现在我知道有一个简单的解决方法来locking和密码保护的VBA代码的标准方法 ,我想继续保护代码的更有效的方法。 我将为客户提供一个基于Excel的工具,但不仅仅是简单的烦恼types的保护,只会阻止最懒惰的黑客。 在Excel-VBA中有没有select,还是我们真的需要编译一个单独的应用程序,忘记我们基于Excel的界面? build议和启示欢迎! 谢谢

从VBA访问VSTO应用程序插件types(Excel)

我们有一个用于Excel的VSTO应用程序插件(不是文档插件),我们希望将事件暴露给VBA代码,以便VBAmacros可以在插件中引发此事件时执行一些操作。 我怎样才能得到的VBA代码能够订阅在VSTO应用程序插件中定义的事件? 我认为,因为在Excel过程中加载插件,这不应该太棘手,但还没有find一种方式。 顺便说一下,使用VS 2008和Excel 2007。 谢谢!

获取对象的所有属性的列表

有没有办法获得一个给定对象的所有有效属性的列表? 如果我想从单元格a1开始,然后分配a1,a2,a3,那么所有有效的属性例如工作表对象都是可以完成的事情吗? 我找不到任何: list = object.enumproperties 有任何想法吗?

当键盘上没有中断键时,Excel VBA中断执行

我只是注意到,在我的笔记本电脑(戴尔XPS 15z)没有BREAK键(没有专用数字键盘)。 我一步一步地运行debugging器,然后当一切似乎都好,我只是让它发挥出来。 然而,它运行在一个无限循环,现在我意识到没有rest键没有办法停止! 这是一个坏笑话吗? 我不得不重新启动计算机; 有没有更优雅的方式? 谢谢。

在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 […]