【发布时间】:2014-08-06 02:11:52
【问题描述】:
我通过将 MySQL 数据库中的数据保存为 csv 并将该 csv 数据粘贴到工作表中来将数据提取到工作表中。此 csv 包含所有客户端的所有数据,由标记单元格分隔,如下所示:“Client1:START”和“Client1:END”。然后我正在运行一个复制两个页面的宏:一个包含来自聚合表的单个客户的数据,另一个包含运行该数据的图表。
我几乎完成了所有工作:复制所有页面并更新图表中的引用以及从该客户的数据表中提取信息的单元格。
剩下要做的就是将汇总表中的数据复制到每个客户的表中。我想了很多,这似乎是最简单的方法,因为我不知道将为给定客户端生成的行数(零到 31 之间的任何值,因为这是每月报告),就是在该客户端的第一行之前的行的第一个单元格中包含“Client1:START”,在之后的行的第一个单元格中包含“Client1:END”。
然后我可以简单地搜索单元格,直到找到这两个,命名它们(因为我还不知道如何将单元格地址保存在变量中),然后以某种方式偏移它们以获得我的实际范围想要,减去标记。
然后我可以复制该范围并将其粘贴到新创建的数据表中。
实际上,我什至还没有达到抵消的程度。我仍在挣扎尝试根据它们的名称选择单元格。这就是我所拥有的:
Dim Client
Dim SelectedCell
Dim StartCell
Dim EndCell
For Each Client In Array("Client1", "Client2")
StartCell = Client & "StartCell"
EndCell = Client & "EndCell"
Sheets("ALL-DATA").Select
For Each SelectedCell In Range("A1:D20")
If SelectedCell.Value = Client & ":START" Then
SelectedCell.Name = StartCell
End If
If SelectedCell.Value = Client & ":END" Then
SelectedCell.Name = EndCell
End If
Next SelectedCell
Range(StartCell & ":" & EndCell).Select '<-- This won't compile
Next Client
那个范围不允许我使用变量进行选择,所以我有点卡住了。 VBA 似乎只允许您使用地址字符串选择范围。
如果有人能指出我正确的方向,将不胜感激。而且,如果您知道我可以如何调整选择以排除实际标记(考虑到数据长度为零的可能性),那将是非常棒的和巨大的奖励。
谢谢!
【问题讨论】:
-
此代码无法编译。 Excel 的对象模型中没有允许单元格/范围具有
.Name属性的上下文。此外,即使它 did,你的赋值语句也是错误的:为了将 to 赋值给StartCell变量,它需要位于语句的左侧等。您尝试根据这些变量进行选择的最后一行必须是:Range(StartCell & ":" & EndCell).Select——但这假设您已经修复了其他问题并且这两个变量都表示有效的地址字符串。 -
由于您没有声明任何变量(或者至少在您上面提供的上下文中没有声明),因此不可能真正推荐解决方案。解决方案将根据您的期望而有所不同,例如,
StartCell是范围对象还是字符串类型数据? -
啊,是的,对不起。我错误地遗漏了声明和赋值。我已经在原始帖子中替换了它们。我没有意识到有人会尝试编译我发布的内容。我正在尝试分配一个字符串名称,而不是将现有单元格名称分配给变量。对不起!
-
好的。我已经修复了范围选择代码。显然,仍然被它绊倒。奇怪的是,单元格的 .Name 位顺利通过。