在VBA Excel中粘贴可变位置的数据

在VBA Excel中粘贴可变位置的数据,excel,vba,Excel,Vba,我试图将数据从一个Excel工作表复制到另一个Excel工作表,但粘贴目标必须是一个变量 基本上,我想做的是打开两个excel工作表。在第一张纸上,会有一些字符串,其坐标我保存如下: sCurrentAddress=Selection.Address(True,True,xlA1,True) 根据已经填充表2的数据,算法会整齐地找到所需的粘贴位置,并将这些坐标保存如下: sDestinationAddress=Selection.Address(True,True,xlA1,True) 然后我想

我试图将数据从一个Excel工作表复制到另一个Excel工作表,但粘贴目标必须是一个变量

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

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

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

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

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

Selection.Copy(sDestinationAddress)
但我收到错误1004:运行时错误:range类的Select方法失败

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

除非插入实际值,否则宏将失败,如下所示:

”Selection.Copy(工作表(1).范围(“A4”)

我需要做什么才能使用我的SDestiningAddress作为选择的参数。复制


(很抱歉,这么长的时间,我仍然说不清楚,昨天确实是我第一次看visual basic。)

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

问题是返回到包含原始数据的工作表。
将鼠标悬停在调用set
sCurrentAddress=Selection
的位置上,当我移动到第二个标题,然后粘贴
sdestinitionaddress=0
后,显示
sCurrentAddress=Inventory\u S1\u 2
我敢肯定这正是问题所在:

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

Application.Goto rcurrentrage,True
ActiveCell。选择
选择。偏移(-1,1)。选择
设置sCurrentAddress=选择

这条线是我寻找下一个头球的地方。当我尝试使用精确坐标时,这个.Find似乎起作用,但现在它找到了0的第一个实例(sDestinationAddress),这是复制的材质中的第一个值。因为它总是复制0,然后查找第一个0,所以它永远找不到下一个标头


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

您可以直接使用Range,而不使用Address

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
编辑

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

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

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

如果您只是将单元格值从一个位置复制到另一个位置,那么您甚至不需要使用
。如果两个范围的尺寸相同,则复制

rngDestination.Value = rngSource.Value 

这确实完成了任务,但现在我失去了“我的位置”。变量似乎被单元格的值替换,并且坐标不存在。我需要从第1页复制下一列,并将其放在第2页的不同位置。也许我也可以为地址设置一个变量。下一列是
rngSrc.Offset(0,1)
这是个什么问题?您试图将一个单元格的内容复制到另一个单元格,不是吗?该变量存储范围对象本身,而不仅仅是内容。你认为它为什么只存储内容?如果你能更新你的问题来描述你的算法是如何决定目的地范围的,这会有所帮助。它只是基于列标题吗?我试图将一次单元格的内容复制到下一个单元格,但我试图保持单元格所在位置的坐标。我显然不明白如何有效地利用存储整个范围对象的事实。我使用的是
Application.Goto rcurrentrage,True
,我觉得我几乎想发明…
Goto rcurrentrage.xycordinations
之类的东西。