1

我正在使用下面的代码从不同的工作表中查找一些值。每次我收到运行时错误 13。我不确定如何更正我的数据类型。对我来说奇怪的是,我确实返回了正确的值,但并非没有收到此错误(这会阻止我的其余代码运行)。你能解释一下我该如何纠正吗?谢谢!

Dim acs As Integer

For acs = 2 To 2000

Set rng1 = Sheets("RD" & y).Range("C" & acs)
Set rng2 = Sheets("RD" & y).Range("D" & acs)
Set rng3 = Sheets("RD" & y).Range("E" & acs)

If Sheets("Tsecond").Range("Y" & acs) = Sheets("inputs").Range("B" & y) Then
Sheets("Tsecond").Range("AE" & acs).Copy
Sheets("RD" & y).Range("C" & acs).Select
Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Tsecond").Range("AE" & acs).Copy
Sheets("RD" & y).Range("C" & acs).Select
Selection.PasteSpecial Paste:=xlPasteValues

Sheets("Tsecond").Range("Y" & acs).Copy
Sheets("RD" & y).Activate
rng2.Select
ActiveSheet.Paste

Sheets("Tsecond").Range("T" & acs).Copy
Sheets("RD" & y).Activate
rng3.Select
ActiveSheet.Paste


End If
Application.ScreenUpdating = False

Next acs
4

1 回答 1

2

当我在一行代码中遇到令人困惑的错误时,我所做的就是通过使用简单的赋值将这一行分成多行。运行这些简单的任务并观察哪个错误以及其他调试信息有时可以揭示问题所在。对于您的线路:

If Sheets("Tsecond").Range("Y" & acs) = Sheets("inputs").Range("B" & y) Then

我要做的是这样的:

Set s1 = Sheets("Tsecond")
Let rc1 = "Y" & acs
Set r1 = s1.Range(rc1)
Set s2 = Sheets("inputs")
Let rc2 = "B" & y
Set r2 = s2.Range(rc2)
If r1 = r2 then

如果在 之前出现错误If,那么调试器应该可以帮助您查看分解表达式的各种类型。如果错误出现在该If行上,则将其更改为:

Let v1 = r1.Value
Let v2 = r2.Value
if v1 = v2 then

调试器应该帮助您显示 v1 和 v2 是什么类型(以防它们不兼容),或者是否存在其他错误(即 r2.Value 表示多个单元格而不是单个值)。

也许这会让你对这个问题有一些了解。

于 2012-12-05T21:39:34.250 回答