Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA错误438“;对象没有';“不支持此属性或方法”;_Vba_Excel - Fatal编程技术网

Excel VBA错误438“;对象没有';“不支持此属性或方法”;

Excel VBA错误438“;对象没有';“不支持此属性或方法”;,vba,excel,Vba,Excel,好的,我肯定是VBA的新手,但我正在学习。据我所知,我的代码没有理由不能正常运行,而且在过去也有过。不过,这个错误不断出现。我的目的是制作一张工作表,当您将一个人添加到主工作表时,它会自动更新其他工作表。代码似乎工作正常,但它突然抛出了这个错误,我不知道为什么。我环顾四周,但似乎没有一个解决方案与我的问题有着千丝万缕的联系。如果您能帮我找出错误的确切位置,我们将不胜感激 以下是调试器指出错误的地方: Private Sub Worksheet_Activate() ThisWorkboo

好的,我肯定是VBA的新手,但我正在学习。据我所知,我的代码没有理由不能正常运行,而且在过去也有过。不过,这个错误不断出现。我的目的是制作一张工作表,当您将一个人添加到主工作表时,它会自动更新其他工作表。代码似乎工作正常,但它突然抛出了这个错误,我不知道为什么。我环顾四周,但似乎没有一个解决方案与我的问题有着千丝万缕的联系。如果您能帮我找出错误的确切位置,我们将不胜感激

以下是调试器指出错误的地方:

Private Sub Worksheet_Activate()
    ThisWorkbook.UpdateSheets (Week2)
End sub
这就是被调用的函数:

Public Function UpdateSheets(ByRef w As Worksheet)
HowManyPeople
With w
    .Columns("A:W").HorizontalAlignment = xlCenter
    Dim i As Integer
    Dim j As Integer
    For i = 1 To x
        If IsEmpty(.Cells(i, 2)) Then
            For j = 2 To 12
                .Cells(i + 4, j).Borders.LineStyle = xlContinuous
                If j <> 12 Then
                    .Cells(i + 4, j).Interior.ColorIndex = 2
                    .Cells(i + 4, j).Locked = False
                Else
                    .Cells(i + 4, j).Interior.ColorIndex = 15
                    .Cells(i + 4, j).Locked = True
                End If
                If j = 2 Then
                    .Cells(i + 4, j).Value = Week1.Cells(i + 4, j)
                Else
                    .Cells(i + 4, j).Value = "0"
                End If
            Next j
        End If
    Next i
    i = x + 5
    Do
        For j = 2 To 12
            .Cells(i, j).Borders.LineStyle = xlNone
            .Cells(i, j).Interior.ColorIndex = 2
            .Cells(i, j).Locked = True
            .Cells(i, j).Value = ""
        Next j
        i = i + 1
    Loop Until IsEmpty(.Cells(i, j))
End With

End Function
公共函数更新表(ByRef w作为工作表)
有多少人
与w
.列(“A:W”)。水平对齐=xlCenter
作为整数的Dim i
作为整数的Dim j
对于i=1到x
如果为空(.Cells(i,2)),则
对于j=2到12
.Cells(i+4,j).Borders.LineStyle=xlContinuous
如果j 12那么
.单元(i+4,j).内部.ColorIndex=2
.单元格(i+4,j).锁定=错误
其他的
.单元(i+4,j).内部颜色指数=15
.单元格(i+4,j).锁定=真
如果结束
如果j=2,则
.单元格(i+4,j).值=周1.单元格(i+4,j)
其他的
.单元格(i+4,j).Value=“0”
如果结束
下一个j
如果结束
接下来我
i=x+5
做
对于j=2到12
.Cells(i,j).Borders.LineStyle=xlNone
.Cells(i,j).Interior.ColorIndex=2
.Cells(i,j).Locked=True
.Cells(i,j).Value=“”
下一个j
i=i+1
循环直到等空(.Cells(i,j))
以
端函数
HOWMANYOPLE函数是一种基本的行计数方法。x是howmanyopele方法中给定值的公共工作簿变量。Week1和Week2是工作表的技术名称(未显示名称)

解决方案 在sub中,更改此项:
此工作簿.UpdateSheets(周2)

对此
callupdatesheets(thishworkbook.Worksheets(“Week2”))

问题的解释 见

此工作簿
对象没有
UpdateSheets
成员

请将
thiswoolk.UpdateSheets(Week2)
替换为
thiswoolk.UpdateSheets Week2
,并确保UpdateSheets位于此工作簿模块中。或者只需使用
UpdateSheets Week2
如果在VBA中执行插入->模块,并将UpdateSheets(…)放入该模块,则不需要函数调用中的“ThisWorkbook.”前缀,您可以从任何工作表中调用它。您还应该在UpdateSheets内设置一个断点,如果它被调用,则逐步查找真正的错误行。有时Excel调试器会感到困惑,并将调用函数的行标记为错误点,而错误实际上在被调用函数中。您能否说明,如何设置“Week2”变量?我很难理解您的函数如何能够更改工作表上的任何内容。函数不能更改工作表中除调用它们的单元格以外的任何内容。SUB修改应用程序、书本、工作表和范围属性;函数返回的对象或值@Mark Fitzgerald并不完全正确。仅当顶级函数由Excel单元格公式调用时,才会阻止函数(以及调用的子函数和子子函数)更改Excel单元格。如果从UI控件、Excel事件或开发人员功能区上的宏按钮调用顶级子对象,则子对象加上任何被调用函数和被调用子对象都可以更改Excel单元格。我在各种函数中更改Excel单元格(在这些情况下,函数返回的是成功/失败代码)。