0

我正在尝试将数据从一个 Excel 工作表复制到另一个工作表,但粘贴目标需要是一个变量。

本质上,我想要做的是打开两个 Excel 表。在第一张纸上,会有一些字符串,我保存的坐标如下:

sCurrentAddress = Selection.Address(True, True, xlA1, True)

根据已经填充工作表 2 的数据,算法巧妙地找到所需的粘贴位置并将这些坐标保存如下:

sDestinationAddress = Selection.Address(True, True, xlA1, True)

然后我想做的是将第一张表中的信息粘贴到第二张表中,如下所示:

Selection.Copy (sDestinationAddress) 但我收到错误 1004:运行时错误:范围类的选择方法失败。

现在,我正在处理的第一个值恰好是 A4,当我将鼠标悬停在“sDestinationAddress”上时,它显示保存在 sDestinationAddress 中的值是 '[exampleFile.xlsx]Sheet 1'!$A$4

除非我像这样插入实际值,否则宏会失败:

'Selection.Copy (Worksheets(1).Range("A4"))

我需要做什么才能使用我的 sDestinationAddress 作为 Selection.Copy 的参数?


(很抱歉这么长而且口齿不清,昨天是我第一次看visual basic。)

关于算法:我有 144 个不同的标题来标记下面 6 行中的信息。例如,我将数据从标题为:Inventory_S1_1 的列移动到新的电子表格。这张纸上的“S1_1”意味着另一张纸:S=钻石,1 = 黑色,_1 = 玩家 1。所以我的算法找到了一个尚未处理的标题(假设这里 Inventory_S1_1 是它的第一个标题) t 处理),复制标题下方的列,在新电子表格中找到与玩家 1 的黑钻石相对应的位置,然后粘贴。粘贴算法工作正常,因为模板是手工制作的,但是搜索算法在寻找标题时会丢失,因为它搜索可能混乱的数据。

问题是返回到带有原始数据的工作表。
将鼠标悬停在我调用 set 的位置sCurrentAddress = Selection表明,sCurrentAddress= Inventory_S1_2一旦我移动到第二个标题,然后在我粘贴之后,sDestinationAddress = 0
我很确定这正是有问题的行:

Set rCurrentRange = .Find(What:=sCurrentAddress, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 我跟着

Application.Goto rCurrentRange, True ActiveCell.Select Selection.Offset(-1, 1).Select Set sCurrentAddress = Selection

我正在寻找下一个标题。当我尝试使用精确坐标时,这个 .Find 似乎可以工作,但现在它 .Finds 找到 0 (sDestinationAddress) 的第一个实例,这是复制材料中的第一个值。由于它总是复制 0,然后寻找第一个 0,它永远不会找到下一个标头。

我意识到 Range 对象有一个 .Address 属性,但我不知道在这种情况下它是否有帮助。

4

1 回答 1

1

您可以直接使用范围而不是使用地址

Dim rngSrc as Range, rngDest as range

Set rngSrc = Selection
'do your destination-finding thing
Set rngDest = Selection

rngSrc.Copy rngDest 'no need for parentheses here

编辑

您很少需要选择范围来使用它们,并且将实际范围对象存储在变量中几乎总是比尝试使用范围地址更好。

如果您需要保留特定单元格或范围的坐标,则将其存储在范围变量中是最简单的方法。

要记住的一件事是范围对象的默认属性是“值”——这可以解释为什么在单步执行代码时将光标悬停在范围变量上时会看到范围的值——它是显示的值。

.Copy如果您只是将单元格值从一个地方复制到另一个地方,那么如果两个范围的尺寸相同,您甚至不需要使用:

rngDestination.Value = rngSource.Value 
于 2012-07-05T20:18:47.190 回答