【问题标题】:How to debug "Object doesn't support this property or method" in Excel VBA?如何在 Excel VBA 中调试“对象不支持此属性或方法”?
【发布时间】:2016-06-18 00:52:08
【问题描述】:

我不断收到错误“483”:对象在突出显示的行上不支持此属性或方法。我是 excel-vba 的初学者,我正在尝试自学。

Sub Magic()

Dim i As Integer, j As Integer, k As Integer
Dim featcode(9999)
Dim partnum(9999)
k = 4
i = 0
j = 0        
For i = 2 To 616 
    featcode(i) = Cells(i, 1).Value
Next i
    For j = 1 To 9999 
    partnum(j) = ThisWorkbook.Worksheets(3).Cells(j, 8).Value
Next j
        For i = 2 To 616
    For j = 1 To 1000
        If featcode(i) = partnum(j) Then
            **ThisWorkbook.Worksheets(2).Cells(i, k).Value = ThisWorkbook.Worksheets(3).partnum(j).Value**
            k = k + 1
        End If
    Next j
    k = 4
Next i
End Sub

【问题讨论】:

  • 由于partNum(j) 将成为一个值,因此您不能使用.Value.ValuepartNum(j) 是什么?这是行还是列的值?如果这是您的意图,您将错过您想要放入 partNum(j)Cell()。你能解释一下潜艇应该做什么吗?
  • 尝试将行替换为 ThisWorkbook.Worksheets(2).Cells(i, k).Value = partnum(j) 。这就是为什么你首先拥有数组的原因,不是吗?
  • 只需使用..= partnum(j) 你不需要参考工作表
  • 您好,感谢您的帮助。 partNum(j) 应该将值存储在一列中。这个 vba 试图做的事情如下:我在另一个工作表上有一个很长的特征列表和很多零件号,它们有自己的一些特征。每个零件编号都有多个特征,并且它们不是唯一的。我需要提取一组特定特征的所有零件编号。我知道我需要使用 2D 数组,但这只是草稿,看看它是否有效。

标签: excel vba


【解决方案1】:

这不仅仅是对您问题的回答,我还想给您一些关于您的代码的提示

Sub Magic()

Dim ws as Worksheet
Dim i As Integer, j As Integer, k As Integer
'You can use dynamic arrays in VBA so you dont have to "guess" the length beforehand, see first comment to this answer
Dim featcode(9999)
Dim partnum(9999)
Set ws = ThisWorkbook.Worksheets(3)
'you dont have to assign values to these variables outside of your for loop, as you assign them right there
k = 4
i = 0
j = 0        
For i = 2 To 616 
    featcode(i) = Cells(i, 1).Value
Next i
'indent new lines properly, so you don't lose overview
For j = 1 To 9999 
    partnum(j) = ThisWorkbook.Worksheets(3).Cells(j, 8).Value
Next j
For i = 2 To 616
   For j = 1 To 1000
        If featcode(i) = partnum(j) Then
            'you can declare objects for referencing to worksheets or cells, so you dont have to write these enormous blocks of code (see above)
            'so instead of ThisWorkbook.Worksheets(2).Cells(i, k).Value = partnum(j)
            'use
            ws.Cells(i,k) = partnum(j)
            k = k + 1
        End If
    Next
    k = 4
Next
End Sub

HTH :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多