gpt4 book ai didi

vba - ThisWorkbook 运行时错误 438

转载 作者:行者123 更新时间:2023-12-03 01:42:26 35 4
gpt4 key购买 nike

我有一个 VBA 将唯一值从 Sheet1 复制并粘贴到 Sheet3 上。但是,当我运行 VBA 时,出现运行时错误 438。我的 VBA 如下所示:

Sub UniqueList()

Application.ScreenUpdating = False
Dim lastrow As Long
Dim i As Long
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")

ThisWorkbook.Sheet1.Activate
lastrow = Sheet1.Cells(Rows.Count, "M").End(xlUp).Row

On Error Resume Next
For i = 1 To lastrow
If Len(Cells(i, "M")) <> 0 Then
dictionary.Add Cells(i, "M").Value, 1
End If
Next

Sheet3.Range("a2").Resize(dictionary.Count).Value = _
Application.Transpose(dictionary.keys)

Application.ScreenUpdating = True
MsgBox dictionary.Count & " unique cell(s) were found and copied."

End Sub

出现错误的行是:

ThisWorkbook.Sheet1.Activate

我使用 Sheet3 中的按钮运行 VBA。但我也尝试使用 AltF8 和 AltF11 在sheet1 打开的情况下运行它,但没有任何效果。

我不太确定为什么会出现这个错误,所以我希望有人可以帮助解决问题

最佳答案

Sheet1 不是 ThisWorkbook 的成员。 ThisWorkbook 是一个 Workbook 实例,并且 Workbook 对象不会为其 Worksheets 中的每个工作表公开“动态成员” > 收藏。因此错误 438,对象不支持属性或方法

Sheet1 [我推测]是 ThisWorkbook 中工作表的 CodeName:它是一个全局范围的 Worksheet > VBA 可以方便地创建对象,以文档模块的 (Name) 属性命名。

Sheet1 对象有一个 Parent 属性;与每个 Worksheet 对象一样,它已经知道它属于哪个 Workbook 实例:

Debug.Print Sheet1.Parent Is ThisWorkbook

IntelliSense 一直试图告诉您(通过列出 Sheet1 成员)- 听听它说什么!

<小时/>

也就是说,像这样修复指令:

Sheet1.Activate

...不能解决另一个问题:您使用Activate只是为了让不合格的Cells调用可以引用该特定工作表:

For i = 1 To lastrow
If Len(Cells(i, "M")) <> 0 Then
dictionary.Add Cells(i, "M").Value, 1
End If
Next

相反,限定它们:

For i = 1 To lastrow
If Len(Sheet1.Cells(i, "M")) <> 0 Then
dictionary.Add Sheet1.Cells(i, "M").Value, 1
End If
Next

然后 Activate 调用就变得完全没用了。

这些隐式ActiveSheet引用很容易引入,但很难发现。 Rubberduck (我管理的一个开源 VBE 插件项目)可以帮助您找到它们(以及其他东西):

"Implicit reference to ActiveSheet" inspection results

关于vba - ThisWorkbook 运行时错误 438,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46323528/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com