gpt4 book ai didi

vba - Excel宏粘贴时出错

转载 作者:行者123 更新时间:2023-12-04 21:41:23 27 4
gpt4 key购买 nike

我正在尝试创建一个可能最终会变得非常大的 excel 宏,为了让事情变得更容易,我一次处理一点。到目前为止我有....

Sub Macro4()
'
' Test Macro
'
'Selects the product_name column by header name
Dim rngAddress As Range
Set rngAddress = Range("A1:Z1").Find("product_name")
If rngAddress Is Nothing Then
MsgBox "The product_name column was not found."
Exit Sub
End If
Range(rngAddress, rngAddress.End(xlDown)).Select

'Inserts new column to the left of the product_name column
Selection.Insert Shift:=xlToRight

'Re-selects the product_name column
Range(rngAddress, rngAddress.End(xlDown)).Select

'Copys the contents of the product_name column
Selection.Copy
Selection.Paste

End Sub

我希望它执行以下操作....
  • 在电子表格中搜索标题名称 '产品名称'
  • 的左侧插入一个空白列'产品名称' 专栏
  • 复制的内容'产品名称' 专栏
  • 将它们粘贴到新创建的空白列
  • 将此新列中的标题名称更改为 '产品名称_2'

  • 目前它工作正常,直到粘贴到这个新创建的列中,然后我得到一个
    'Run-time error '438'; - Object doesn't support this property or method'

    谁能建议我哪里出错了?

    最佳答案

    你的错误是:

    Range(rngAddress, rngAddress.End(xlDown)).Select

    这从列的顶部向下选择到第一个空白单元格的正上方。插入将列的这一部分向右移动,将其余部分留在原处。当您再次选择时,您可能会获得更大的范围,因为您混合了两列。复制失败,因为您随后尝试将值复制到值的顶部。

    如果这没有意义,请使用 F8 单步执行您的宏,并查看每一步发生的情况。

    当您了解为什么当前宏不起作用时,请尝试以下操作:
    Sub Macro5()

    Dim rngAddress As Range
    Dim ColToBeCopied As Integer

    Set rngAddress = Range("A1:Z1").Find("'product_name")
    If rngAddress Is Nothing Then
    MsgBox "The product_name column was not found."
    Exit Sub
    End If

    ColToBeCopied = rngAddress.Column
    Columns(ColToBeCopied).EntireColumn.Insert
    Columns(ColToBeCopied + 1).Copy Destination:=Columns(ColToBeCopied)

    End Sub

    笔记:
  • 我没有选择任何东西。
  • 我已将代码留在事件工作表上,但最好使用 With Sheets("XXX") ... End With .

  • 回答第二个问题

    宏记录器不擅长展示如何系统地处理单个单元格。
    With Sheets("xxxx")
    .Cells(RowNum,ColNum).Value = "product_name 1"
    End With

    以上使用 With我推荐的。注意 Cells 前面的点。

    下面的一个在事件表上运行。
    Cells(RowNum,ColNum).Value = "product_name 1"

    RowNum 必须是一个数字。 ColNum 可以是数字(比如 5)或字母(比如“E”)。

    在您的情况下,RowNum 为 1,ColNum 为 ColToBeCopied 和 ColToBeCopied + 1。

    附言

    我忘了提到要找到列的底部行使用:
    RowLast = Range(Rows.Count, ColNum).End(xlUp).Row

    那是从底部向上移动,而不是从顶部向下移动。

    附言2

    要使用单元格指定范围:
    .Range(.Cells(Top,Left),.Cells(Bottom,Right))

    点必须匹配:全部三个或一个都不匹配。

    关于vba - Excel宏粘贴时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702086/

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