【问题标题】:object doesn't support this property or method in vba对象在 vba 中不支持此属性或方法
【发布时间】:2017-01-08 22:52:26
【问题描述】:
Sub main()

Dim i, j As Integer

Worksheets("sheet1").Activate
Worksheets("sheet2").Activate

For i = 1 To 200
    For j = 1 To 200
        If Worksheets("sheet1").Cells(i, 1) = Worksheets("sheet2").Cells(j, 1) Then
            Worksheets("sheet1").Cells(i, 1).inerior.Color = vbRed
        End If
    Next j
Next i

End Sub

不知道为什么会返回错误?似乎一切都是正确的。但它说该对象不支持此属性或方法。 我已经尝试过 excel 2013。

【问题讨论】:

  • 你有一个 Typo ,它应该是 Worksheets("sheet1").Cells(i, 1).Interior.Color = vbRed ,而不是 inerior
  • 除此之外,还需要定义Dim i As integer, j As Integer,否则i将被定义为As Variant。另外,最好远离Activate
  • 点后的小写字母通常表示.inerior 不存在。 stackoverflow.com/questions/21399691/…

标签: excel vba


【解决方案1】:

让我们快速检查您的代码以消除此错误并避免将来出现错误。其中大部分都包含在 Shai Rado 的 cmets 中。


Dim i, j As Integer

这是将i 声明为一个变体。你需要像这样具体:

Dim i As Integer, j As Integer

以下代码什么都不做,可以删除。如果您想使用ActiveSheet 对象,您只需要Activate 工作表。非常不鼓励这样做——不这样做真是太好了。

Worksheets("sheet1").Activate
Worksheets("sheet2").Activate

例外情况是,如果您希望 Excel 激活与您在宏运行后立即调用 sub 的工作表不同的工作表,那么您可以将这些 .Activate 语句之一放在 sub 的末尾


Worksheets("sheet1").Cells(i, 1).inerior.Color = vbRed

这里有一个错字。 Interior 而不是 inerior。您通常可以发现这些错误,因为您可以看到您的属性没有像您预期的那样大写。


您尚未指定这些工作表在哪个Workbook 中。由于Sheet1Sheet2 是默认名称,因此如果您在运行子时打开了两个或更多工作簿,那么您尤其处于危险之中。 Excel 可能会变得混乱并在错误的工作簿上运行代码。以下是避免这种情况的几种方法:

  1. Worksheets("Sheet1").Cells() 更改为ThisWorkbook.Worksheets("Sheet1").Cells()
  2. 使用工作表对象名称。如果您没有更改它们,这些只是Sheet1Sheet2 等。例如。 Sheet1.Cells()


所以这是你的最终代码
Sub main()

Dim i as Integer, j As Integer

For i = 1 To 200
    For j = 1 To 200
        If Sheet1.Cells(i, 1) = Sheet2.Cells(j, 1) Then
            Sheet1.Cells(i, 1).Interior.Color = vbRed
        End If
    Next j
Next i

'Sheet2.Activate
End Sub

我还建议您将您的 sub 命名为更好地描述 它的作用,而不是 main

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多