我编写了一个VBA脚本,该脚本通过银行对帐单查找某个值的付款。这段代码在我编写时运行,但几个月后我得到运行时错误'438'Object不支持这个属性或方法;这是代码的摘录。
class Win32Interface(object):
def __init__(self, win32_object):
super(Win32Interface, self).__setattr__('win32_object', win32_object)
def __setattr__(self, k, v):
if k in self.properties:
super(Win32Interface, self).__setattr__(k, v)
else:
setattr(self.win32_object, k, v)
def __getattr__(self, v):
return getattr(self.win32_object, v)
@property
def properties(self):
class_items = self.__class__.__dict__.iteritems()
return {k:v for k, v in class_items if isinstance(v, property) and k != 'properties'}
错误发生在'if'行。
我发现了各种以相同方式引用单元格值的示例,这在以前是有用的。如果你谷歌这个错误有很多结果,我发现使用'范围'比使用'单元'引用单个单元格更常见,但对我来说如何轻松翻译我的(x,y)单元格变量并不明显/循环到一个范围“A1”类型的值,所以我还没有尝试重写代码以使用范围。
我假设对象是bankWS.Cells,它是属性而不是问题的方法。我想知道对象的值是什么(= property),我不想对对象做任何事情(=方法)
我已经看到了许多不同的编写单元格对象的方法,并尝试了各种排列,但没有一种方法有所作为。例如
Set bankWB = ActiveWorkbook
Set bankWS = ActiveSheet
For rowcount = 0 To 250
skipline = False
If bankWS.Cells(rowcount, paidcol) = 5 Then
payee = Trim(bankWS.Cells(rowcount, payeecol))
paid = "5"
我认为代码没问题,其他的东西也发生了变化。
感谢@ 99moorem我的行计数循环应该从1开始,而不是0,没有单元格(0,1)。