Excel 将动态范围文本复制到另一个范围

Excel 将动态范围文本复制到另一个范围,excel,vba,Excel,Vba,我试图编写一段代码,将一个特定命名区域单元格的值复制到另一个命名区域 代码如下: 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(

我试图编写一段代码,将一个特定命名区域单元格的值复制到另一个命名区域

代码如下:

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语句和结果中都会给出一个错误。但如果我把它写成一个静态语句,比如“人类”代表范围(“种族”)。细胞(1,1)。虽然这种解决方法可行,但我希望使所有引用都是动态的,这样更改或移动数据值所需的时间就会少得多

例如,我尝试了Range(“Origins”).Cells(1,1).Text,但仍然不起作用。还有别的办法吗

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

增加:

单元格()的引用是因为它们引用的是实际范围,而不仅仅是一个单元格。有些是指大的表格,所以有时是范围(“表格”)。单元格(5,3)并不总是指1,1。我不确定是否还有其他方法可以引用表中的特定单元格

例如,我想做的一点是: 范围(“原点”)=范围(“原点”)。单元格(4,1)

两件事:

  • 使用
    范围(“RaceDrop”).Value
    指示单元格的实际值。在大多数情况下,
    范围(“RaceDrop”)=
    会起作用,但最好总是明确地说
    .Value
  • 我不完全确定您试图对代码的
    单元格(1,1)
    部分执行什么操作,但是如果您希望在该范围内找到左上角的值,请尝试下面的代码
替换

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

如果您所引用的单元格仅命名为单个单元格的
范围
,您应该能够使用

Range("Races").Value

而不是上述内容。

发现了问题。通常情况下,我不必专门键入数据所在的工作表,因为表是全局工作的(通常我只有一个范围(“表”),无论代码在哪里,它都工作,因为它总是知道引用的位置)。。似乎因为我试图将数据从一个表复制到另一个工作表上的一个表中,所以不能这样工作,需要定义工作表(“”)

奇怪的是,除了在这种情况下,它似乎总是在全球范围内运行。哦,好吧。谢谢你的努力

新代码示例:

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)

如果语句的这部分没有任何意义:
。。。或范围(“种族”)。单元格(1,1)和…
仅测试一个单元格而不将其与任何其他单元格进行比较,只有在该单元格预期包含布尔值的情况下才会起作用-即,True或FALSE它确实有意义。如果X和A或者X和B。代码继续测试Y和A或者Y和B,还有X和C等等。因此,如果它不测试两个值,那么它将在错误的部分结束。如果我只测试了X,它将导致跳过C,因为稍后会对其进行检查,并得到不同的结果。例如,当我第一次做它的时候,我只是做了如果X和A或B,如果Y和A或B,它总是会产生第一行,因为它不仅仅是“或B”,所以Y和B永远不会被使用。整个支票都必须在那里。相信我,这是有道理的。下面答案中的更新代码将该部分更改为
。。。或者范围(“种族”)=表格(“数据”)。范围(“种族”)。单元格(1,1)和…
不确定您的问题是否有输入错误,但您没有将
范围(“种族”)。单元格(1,1)
与您问题中显示的代码中的任何内容进行比较。使用单元格()的引用是因为它们指的是实际范围,而不仅仅是一个单元格。有些是指大的表格,所以有时是范围(“表格”)。单元格(5,3)并不总是指1,1。我不确定是否还有其他方法可以引用表中的特定单元格。例如,我想做的一点是:Range(“OriginDrop”)=Range(“Origins”)。单元格(4,1)
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)