【发布时间】:2015-08-10 19:15:17
【问题描述】:
我在我正在处理的项目中使用以下代码:
Sub test()
Application.ScreenUpdating = False
Worksheets("Technician Report Summary").Range("G2:I8561").ClearContents
Dim Source As Range, Target As Range
Dim n As Long, i As Long
n = Range("C:C").Cells.Count
i = Cells(n, "C").End(xlUp).Row
Set Source = Range(Cells(1, "C"), Cells(n, "E"))
Set Target = Range("G2:I2")
For i = 2 To n
If Source.Cells(i, 1).Value <> "Not Used" And Not Application.WorksheetFunction.IsNA(Source.Cells(i, 3).Value) Then
Source.Rows(i).Copy
Target.PasteSpecial xlPasteValues
Set Target = Target.Offset(1)
End If
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
当我运行看起来运行正常的代码时,它会按照代码中设置的标准将过滤值列表复制到同一个工作表中的另一个位置。问题是我也收到以下错误:
运行时错误“13”:类型不匹配
我做错了什么?我认为我在声明变量或类似的东西时犯了某种错误,但我对 VBA 不够熟悉,无法准确指出问题所在。
任何帮助将不胜感激。
编辑:
抱歉,不清楚。
我在工作表“技术员报告摘要”中有一组值,占据了 C2:E8561 范围。我想过滤并复制一些错误的值,这些是“未使用”和“#N/A”错误。上面的代码复制了这些值,然后将它们粘贴到原始的未过滤值集旁边,并在 G、H 和 I 列中删除了“未使用”和“#N/A”的实例。
当我运行它时,没有任何行被突出显示为问题,错误对话框只是弹出,当我点击“确定”时没有突出显示。
编辑 2:
我进行了@KFitchter 建议的更改,现在它似乎锁定了。我按下了退出键,下面一行被突出显示:
If Source.Cells(i, 1).Text <> "Not Used" And Not Application.WorksheetFunction.IsNA(Source.Cells(i, 3).Value) Then
编辑 3:
只是想到了其他可能会弄乱它的东西。 C、D 和 E 列中的值实际上是从工作簿的其他位置提取值的函数。这是其中一个功能的示例。
=INDEX('原始数据'!$A:$A,$B2)
【问题讨论】:
-
错误出现在哪一行?
-
旁注:
Set Source = Range(Cells(1, "C"), Cells(n, "E"))不限定range或cells是从哪个工作表中提取的。您需要澄清这一点才能正常工作/工作而不会出现意外的未来错误。 -
你的问题很不清楚。一方面(正如@KFichter 提到的),您没有告诉我们错误行。其次,您还没有告诉我们代码应该如何进行正确评估。
-
Cells() 是否将字母作为参数?编辑:确实如此,我真的不知道。
-
@KFichter - 是的,第二个参数可以是数字或列字母
标签: vba excel excel-2013