繁体   English   中英

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

[英]Pasting data in variable locations in VBA-Excel

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

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

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

基于已经在Sheet 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的参数,我需要做什么?


(很抱歉,这冗长而又不清晰,昨天确实是我第一次看视觉基础。)

关于算法:我有144个不同的标头来标记下面6行中的信息。 例如,我将数据从标题为Inventory_S1_1的列移动到新的电子表格。 一张纸上的'S1_1'代表另一张纸:S = Diamond,1 =黑色,_1 =玩家1。因此,我的算法找到了一个尚未处理的标头(假设Inventory_S1_1是它尚未使用的第一个标头) (已处理),复制标题下的列,在新电子表格中找到与播放器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似乎可以工作,但是现在它.Find可以找到0的第一个实例(sDestinationAddress),这是复制材料中的第一个值。 因为它总是复制0,然后寻找第一个0,所以它从不查找下一个标头。

我意识到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

编辑

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

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

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

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

rngDestination.Value = rngSource.Value 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM