Excelmacros在粘贴时出错

我正在尝试创build一个可能最终变得相当庞大的excelmacros,为了让事情变得更容易,我正在一次性地处理它。 到目前为止,我有….

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 

我想要它做以下…

  • 在电子表格中search标题名称“product_name”
  • “product_name”列的左侧插入一个空白列
  • 复制'product_name'列的内容
  • 将它们粘贴到新创build的空白列中
  • 将此新列中的标题名称更改为“product_name_2”

目前它工作正常,直到粘贴到这个新创build的列,然后我得到一个

 'Run-time error '438'; - Object doesn't support this property or method' 

任何人都可以build议我去哪里错了吗?

你的错误是:

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

这从列顶部select到第一个空白单元之上。 插入将列的这一部分向右移动,而将其余的部分留下。 当你再次select你可能会得到一个更大的范围,因为你有两列混合。 复制失败,因为您然后试图将值复制到值的顶部。

如果没有任何意义的话,用F8单步执行macros,看看每一步发生了什么。

当你明白为什么你当前的macros不起作用时,试试这个:

 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 

注意:

  1. 我没有select任何东西。
  2. 我已经把代码运行在活动页面上了,但是最好使用With Sheets("XXX")End With

回答第二个问题

macroslogging器不擅长显示如何系统地处理个别单元格。

 With Sheets("xxxx") .Cells(RowNum,ColNum).Value = "product_name 1" End With 

以上用途我推荐。 注意单元格前面的点。

下面的一个在活动页面上运行。

 Cells(RowNum,ColNum).Value = "product_name 1" 

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

在你的情况RowNum是1,ColNum是ColToBeCopied和ColToBeCopied + 1。

PS

我忘记提到要find一列的botton行使用:

 RowLast = Range(Rows.Count, ColNum).End(xlUp).Row 

这是从底部向上而不是从顶部向下。

PS 2

使用“单元格”指定范围:

 .Range(.Cells(Top,Left),.Cells(Bottom,Right)) 

点必须匹配:所有三个或没有。

我不确定你想拷贝到哪里,但是当你想粘贴时,你需要做一个select然后
ActiveSheet.Paste
例如:

/你的代码/
Selection.Copy

范围。( “O:O”)select
ActiveSheet.Paste

如果您只想传输值,我会避免完全复制/粘贴。

例如,而不是:

 Range("B1:B100").Copy Destination:=Range("A1") 

我会用:

 Range("A1:A100").Value = Range("B1:B100").Value 

如果我们要把它代入你的代码,并且包括Tony提出的一些评论:

 Sub Macro4() Dim colFound As Integer Dim rowLast As Long Const rowSearch As Integer = 1 'Find the product_name column colFound = Rows(rowSearch).Find("product_name").Column If colFound = 0 Then MsgBox "The product_name column was not found." Exit Sub End If 'Find the last non-empty row rowLast = Cells(Rows.Count, colFound).End(xlUp).Row 'Inserts new column to the left of the product_name column Columns(colFound).EntireColumn.Insert 'Transfer the contents of the product_name column to the newly inserted one Range(Cells(rowSearch, colFound), Cells(rowLast, colFound)).Value = _ Range(Cells(rowSearch, colFound + 1), Cells(rowLast, colFound + 1)).Value 'Rename the new column Cells(rowSearch, colFound).Value = Cells(rowSearch, colFound).Value & "_2" End Sub