问题标签 [vba7]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
45 浏览

arrays - 数组计算顺序问题 - 为什么我不能模拟在 excel 中容易完成的事情?

我正在尝试在 VBA 数组中模拟我在 Excel 中轻松完成的操作,但我无法让它运行。我认为这与计算的性质有关,这取决于计算行的顺序。我将附上一个带有 VBA 代码的 Excel 工作表,但也会在此处包含它。

这个简化的例子是一个更大的数组的替代品,它有大约 50 行和 80 列的计算。一个特定的列具有一组计算,这些计算取决于该行相对于选定行的位置 - 如果行号较高,则应用一组计算,该计算基于上一行的值;如果行号较低,则应用另一组计算,使用 NEXT 行中的值。这个简化的示例如下所示:

在此处输入图像描述

三个蓝色列来自 VBA。接下来的两个白色列是在 Excel 中完成的相同计算(它们执行得更快!)。

您可以看到第二个蓝色列有一组值,这些值在第 4 行上方向上计算,在第 4 行下方向下计算。基本上在单元格 C2 中有一个输入,称为 Select Row,它确定“中间”行是哪个,它输入在该行的单元格 C3 (46) 中输入值,然后在每个后续行中,它将上一行的值乘以相同的 46。反过来,对于“中间”行下方的每一行,每行将下一行乘以 46 . 这是一堆其他复杂三角计算的替身。这对于 Excel 来说是微不足道的,它似乎并不关心哪个单元格取决于什么,它只是返回正确的值,但在 VBA 中却非常困难——无论如何对我来说。

我已经能够通过迭代整个计算列足够的时间来填充依赖于 NEXT 行值的单元格的值来解决这个问题,这些值在第一遍是空的,因为 NEXT 行还没有一个值。我可能没有以最有效的方式做到这一点,如果您有更好的想法,我会很高兴听到它。

但真正的问题是,在另一列中,我想使用进程返回的值。在第三个蓝色列的 Excel 版本中,F 列中的每一行从 E 列中 NEXT 行中的值减去 E 列中该行中的值(F 中的第一个单元格与它正在使用的两个单元格一起以黄色突出显示)。无论该行相对于“选择行”输入编号的位置,它都会执行此操作。我无法在 VBA 的数组中制作一个可以在我的数组中使用的版本。

我尝试了很多方法,但我所做的似乎没有任何效果。不知何故,在数组中循环,从属列 3 从不返回值,我得到一个下标超出范围错误。我尝试了几种策略,但都没有奏效,而且我没有想法。我附上了我用过的 VBA 代码:

这是一个包含 VBA 的 Excel 文件的链接。 链接到 Excel 中的简化示例 我认为可能有比我在这里展示的更简单的方法来完成所有这些操作。感谢您提供的任何帮助,请记住,我希望将其集成到 50 x 80 2D 阵列中。谢谢!

0 投票
1 回答
37 浏览

vba - 集合的集合 - 请参阅带有变量的子集合项以用于主集合

我正在使用(作为示例)在 3x2 矩阵上带有六个文本框的用户窗体:像这样:

我正在尝试将这两个文本框行添加到集合(辅助)中,然后将此集合添加到集合的集合(主)中。然后用主Collection中的Collection变量引用嵌套Collection(辅助)中的对象。喜欢:“集合(主要)。第一个元素。Collection (secondary).Third Element.name”是 c3。

我试图阅读和实现通过键集合的集合在集合集合中引用对象-如何按值而不是引用来制作子集合?,并且我还尝试使用字典,例如建议的 Dynamically Create collection of Collections VBA,但我不断得到:

运行时错误“438”:对象不支持此属性或方法

在这一行(或下面代码中发布的行变体之一):

我试图理解和调整这些例子,但我无法完成它,我不知道我是否遗漏了什么,或者我做错了,或者我只是不明白事情是如何运作的或全部。

通过为每一行创建一个集合并为每个集合创建一个特定的过程,我得到了一个解决方法。当例程到达某个集合时,它会使用该集合的特定引用触发例程,如下所示:

但我希望通过变量而不是具体来完成它,例如:

有什么建议吗?非常感谢

0 投票
2 回答
51 浏览

excel - 在 VBA 的列中返回匹配项

因此,我从工作表中获得了以下数据集:

我需要知道每个账户类型组合的价值。因此,我将帐户和类型复制到 B 列中的另一个工作表并连接帐户和类型。我删除了重复的之后

现在,我想像这样返回每个帐户的值并输入(在列中)。

这是我的代码:

我似乎无法让它工作

0 投票
0 回答
66 浏览

excel - 使用 excel vba 下载 csv 文件的 URL

例如,有什么方法可以从下面的链接下载 csv 文件。“https://www.nseindia.com/corporates-pit?index=equities&symbol=WABCOINDIA&csv=true”

尝试了下面的代码,但没有运气。

0 投票
2 回答
737 浏览

excel - 使用 VBA () 读取 UTF-8 编码的 CSV 时修复 BOM 问题

在尝试使用 VBA (Excel) 读取 UTF-8 编码的 CSV 时,我想就字节顺序标记( 或十六进制的EF BB BF )引起的臭名昭著的问题获得新的建议。请注意,我想避免使用 Workbooks.Open 或 FileSystemObject 打开 CSV。实际上,我宁愿使用 adodb.RecordSet,因为我需要执行某种 SQL 查询。

在阅读了很多(很多!)的东西之后,我相信处理这个特定问题的 4 个最佳解决方案是:

  • 在使用 ADODB.Connection / ADODB.RecordSet 读取 CSV 之前移除 BOM(例如,通过 #iFile 或 Scripting.FileSystemObject-OpenAsTextStream 来有效地读取文件的第一行并移除 BOM)。
  • 创建 schema.ini 文件以便 ADO 正确解析 CSV。
  • 使用向导创建的一些模块(如W. Garcia 的类模块)。
  • 使用 ADODB.Stream 并设置 Charset = "UTF-8"。

最后一个解决方案(使用流)似乎很好,但执行以下操作会返回一个字符串:

您是否知道任何可以帮助使用 .readtext 返回的字符串作为 ADODB.RecordSet 或 ADODB.Connection 的数据源的技巧(除了循环手动填充我的记录集的字段)?

0 投票
0 回答
24 浏览

vba - 从进程名称中获取应用程序名称。64位需要

我找到了一个可以帮助我的一个项目的代码。但是我不能在我的 64 位 MS Access 中使用它。

这是原始帖子如何从进程名称中获取应用程序名称?

0 投票
0 回答
54 浏览

excel - 为什么copycolumn()自定义按钮不复制所有列而只复制最后一列

我在尝试编写 VBA 代码以将列的内容复制到同一项目中的另一个工作表时遇到了问题。问题在于,它不是复制整个列的数据,而是只复制最后一行的数据。

这是我拥有的 VBA 代码。提前致谢。

0 投票
1 回答
223 浏览

excel - 优化 VBA 代码并提高性能

我开发了一个 VBA 宏,用于刷新 5 个 SAP AAO 查询,然后通过删除重复项将这些查询数据复制到表中,然后加载到电源查询中。在那里我添加了一些计算列,然后将这些数据加载到电源枢轴中。

我还使用下面提到的 VBA 代码在每个工作表中执行了一些操作,但是目前运行代码需要 4 分钟以上。

在这 4 分钟内,至少有 45 秒用于刷新 AAO 查询和剩余的宏运行时间(包括刷新电源查询)

我仍在学习 VBA,因此我select / activate在代码中使用了宏记录器代码和工作表。我知道这不是正确的方法,因为除此之外我不知道更好的选择。由于这些事情,宏需要更多的时间来运行。

如果我不使用select代码来选择工作表,那么我会收到一条错误消息并且代码没有运行。

如果有人可以帮助我优化这段代码,那就太好了,这样执行宏操作的时间就会更少。

0 投票
1 回答
58 浏览

excel - 相对引用,recoaring 宏,VBA

我正在使用相对引用在 VBA 中录制宏,我首先选择单元格 A1。生成的代码是这样的:

我想知道为什么我们在第二个和第四个单元格中得到“.Range.("A1)”?相对引用不应该以这样的方式表现,即我们只是从起始单元格开始,我们可以在其他地方开始,所以“A1”不需要出现在代码中吗?我尝试从第二行删除“.Range(“A1”)”,宏似乎做了同样的事情?

0 投票
1 回答
55 浏览

vba - 按钮与模块不同?

我已在按钮中添加了所有代码以提供帮助。我不确定这是否会有所帮助,反正就是这样。如果用户选择半年度,那么会发生几件事。其余的“ifs”也是如此,但我需要先解决这个问题,然后再处理其余的问题。代码太长,简单不复杂。