我正在尝试将数据从一个 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 属性,但我不知道在这种情况下它是否有帮助。