0

我正在尝试编写一些代码,将一个特定命名范围单元格的值复制到另一个命名范围中。

代码如下:

If Not Intersect(Target, Target.Worksheet.Range("RaceDrop")) Is Nothing Then
    If Range("RaceDrop") = Range("Races").Cells(1, 1) And Range("ClassDrop") = Range("Classes").Cells(1, 1) Or Range("Races").Cells(1, 1) And Range("ClassDrop") = Range("Classes").Cells(1, 2) Then
         Range("OriginDrop") = Range("Origins").Cells(1, 1)

每个像 "Range("X") = Range("Y").Cells(x, x)" 这样的语句都会在 If 语句和结果中给出错误。但是,如果我将其设为静态语句,例如 Range("Races").Cells(1, 1) 的 "Human"。虽然此解决方法有效,但我想让所有引用动态化,以便更改或移动数据值所需的时间少得多。

例如,我尝试过 Range("Origins").Cells(1, 1).Text ,但它仍然不起作用。还有其他方法可以解决这个问题吗?

编辑:我还应该补充一点,我得到的错误是“对象'_Worksheet'的方法'范围'失败”

添加:

Cells() 的引用是因为它们引用实际范围,而不仅仅是一个单元格。有些指的是大表,所以有时它会是 Range("Table").Cells(5, 3),它并不总是指 1, 1。我不确定引用特定单元格的另一种方式在一张桌子上。

例如,我想做的一点是: Range("OriginDrop") = Range("Origins").Cells(4, 1)

4

2 回答 2

0

发现了问题。通常,我不必专门键入数据所在的工作表,因为表在全局范围内工作(通常我只有 Range("Table") 并且无论代码在哪里它都可以工作,因为它总是知道在哪里参考)但是..似乎因为我试图将数据从一个表复制到另一个工作表上的一个表中,所以它不能那样工作,并且需要定义 Sheets("")。

除了在这种情况下,它似乎总是在全球范围内工作,这有点奇怪。那好吧。感谢您的尝试。

新代码示例:

If Not Intersect(Target, Target.Worksheet.Range("RaceDrop")) Is Nothing Then
If Range("RaceDrop") = Sheets("Data").Range("Races").Cells(1, 1) and Range("ClassDrop") = Sheets("Data").Range("Classes").Cells(1, 1) or Range("Races") = Sheets("Data").Range("Races").Cells(1, 1) and Ranges("ClassDrop") = Sheets("Data").Range("Classes").Cells(2, 1)
     Range("OriginDrop") = Sheets("Data").Range("Origins").Cells(1, 1)
于 2012-10-04T13:46:23.873 回答
0

两件事情:

  • 用于Range("RaceDrop").Value表示单元格的实际值。大多数时候Range("RaceDrop") =都会起作用,但最好总是明确地说.Value
  • 我不完全确定您要对Cells(1,1)部分代码执行什么操作,但是如果您要查找范围内的左上角值,请尝试以下代码

代替

Range("Races").Cells(1, 1)

Cells(Range("Races").row, Range("Races").column).Value

如果您所指的单元格Ranges仅以单个命名,则Cell您应该只能使用

Range("Races").Value

而不是上面的。

于 2012-10-04T01:16:38.123 回答