在VBA-Excel中将数据粘贴到可变位置

时间:2012-07-05 19:38:02

标签: excel-vba vba excel

我正在尝试将数据从一个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 = Diamond,1 = Black,_1 = Player 1.所以我的算法找到了尚未处理的标题(假设这里Inventory_S1_1是它的第一个标题' t处理),复制标题下方的列,在新电子表格中找到与播放器1的黑钻相对应的位置,然后粘贴。粘贴算法工作正常,因为模板是手工制作的,但搜索算法会丢失寻找标题,因为它搜索可能混乱的数据。

问题是返回到包含原始数据的工作表 将鼠标悬停在我调用集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似乎工作,但现在它。确定0的第一个实例(sDestinationAddress),这是复制材料中的第一个值。因为它总是复制0,然后寻找第一个0,它永远不会找到下一个标题。

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

1 个答案:

答案 0 :(得分: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