gpt4 book ai didi

excel - 为什么 Left 函数返回运行时错误 '424' ?

转载 作者:行者123 更新时间:2023-12-03 00:18:53 26 4
gpt4 key购买 nike

下面的代码应复制单元格中的值并将其前 10 个字符粘贴到区域中的同一单元格中。在这一行:

Sh.Cells(i, 5) = Left(Sh.Cells(i, 5).Value, 10).Copy

我收到运行时错误“424”(需要对象)。在行前添加“set”不起作用。有谁知道为什么这里会触发错误?

Sub fixCellsValue()
Dim wrk As Workbook
Dim Sh As Worksheet
Dim SourceFolder As String
Dim i As Long, lastrow As Long

SourceFolder = ThisWorkbook.PATH & "\source"

If Dir(SourceFolder & "Filename.*") <> "" Then

Set wrk = Application.Workbooks.Open(SourceFolder & "\Filename.xlsx")
Set Sh = wrk.Worksheets(1)

lastrow = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).row

For i = 2 To lastrow
If Len(Sh.Cells(i, 5)) > 10 Then
Sh.Cells(i, 5) = Left(Sh.Cells(i, 5).Value, 10).Copy
Sh.Cells(i, 5).PasteSpecial Paste:=xlPasteValues
Sh.Cells(i,5).Interior.ColorIndex = 6
End If
Next i
End If
End sub

最佳答案

您需要了解方法和赋值操作的工作原理。

Sh.Cells(i, 5) = Left(Sh.Cells(i, 5).Value, 10).Copy

这是为左侧 (LHS) 表达式 Sh.Cells(i, 5).Value(通过隐式默认成员调用)分配右侧返回的值 ( RHS) 表达式 - 但是 RHS 没有返回任何内容。

Left(Sh.Cells(i, 5).Value, 10)

此表达式返回最多 10 个字符的Variant/String。在 VBA 中,String 只是一个值(类似于 IntegerLong,只不过它包含文本),而 VBA 中的值则不然。没有成员方法

所以你不能这样做:

Debug.Print "ABC".Copy

因为成员调用需要一个对象 - 因此,需要对象

删除.Copy成员调用,您将修复此错误。

<小时/>
Sh.Cells(i, 5).PasteSpecial Paste:=xlPasteValues

这在技术上是多余的 - 之前的行通过直接分配单元格的 Value 来完成这一操作。但是,如果您想调用 Range.Copy,则不能将其作为 RHS 表达式的一部分来执行,因为 Range.Copy 不会返回任何内容 - 所以您会做这样的事情:

Sh.Cells(i, 5).Copy
Sh.Cells(i, 5).PasteSpecial Paste:=xlPasteValues

但话又说回来,这是多余的 - 您不需要在此处涉及剪贴板。

关于excel - 为什么 Left 函数返回运行时错误 '424' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523166/

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