选择范围时,VBA运行时错误1004"应用程序定义或对象定义的错误"

tho*_*mas 23 excel vba excel-vba

选择范围时,我遇到错误1004"应用程序定义或对象定义错误"的问题.

我仍然可以选择行(即Rows("21:21").select)并在同一工作簿的其他工作表中选择范围.我不相信错误在代码中.也许它的一些设置我不知道?

我之前已多次使用完全相同的代码,但由于某种原因我无法在此子函数中使用它(我已经评论了错误发生的位置)...

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer

    'Finds last row of content
    Windows("Excel.xlsm").Activate
    Sheets("Sheet1").Activate
    Range("C21").Select
         '>>>Error 1004 "Application-defined or Object-defined error" Occurs
    Selection.End(xlDown).Select
    CLastFundRow = ActiveCell.Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Range("A21:C" & CLastFundRow).Select
    Selection.Copy
    'Paste Data Values
    Sheets("PalTrakExport PortfolioAIdName").Select
    Range("A21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Bring back to top of sheet for consistancy
    Range("A21").Select
    Range("A1").Select
End Sub
Run Code Online (Sandbox Code Playgroud)

我需要在我的复制中充满乐趣,因为行数会经常变化.同样,下面的代码之前已经使用过,没有错误......但在这个例子中没有.

Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer

'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
     '>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
Run Code Online (Sandbox Code Playgroud)

小智 24

也许您的代码在Sheet1后面,所以当您将焦点更改为Sheet2时,无法找到对象?如果是这种情况,只需指定目标工作表可能会有所帮助:

Sheets("Sheet1").Range("C21").Select
Run Code Online (Sandbox Code Playgroud)

我不太熟悉Select是如何工作的,因为我试图尽可能地避免它:-).您可以在不选择范围的情况下定义和操作范围.同样明确你所引用的一切也是一个好主意.这样,如果您从一张工作表或工作簿转到另一张工作簿,则不会失去跟踪.试试这个:

Option Explicit

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer
    Dim wksSource As Worksheet, wksDest As Worksheet
    Dim rngStart As Range, rngSource As Range, rngDest As Range

    Set wksSource = ActiveWorkbook.Sheets("Sheet1")
    Set wksDest = ActiveWorkbook.Sheets("Sheet2")

    'Finds last row of content
    CLastFundRow = wksSource.Range("C21").End(xlDown).Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Set rngSource = wksSource.Range("A2:C" & CLastFundRow)

    'Paste Data Values
    Set rngDest = wksDest.Range("A21")
    rngSource.Copy
    rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'Bring back to top of sheet for consistancy
    wksDest.Range("A1").Select

End Sub
Run Code Online (Sandbox Code Playgroud)


小智 12

这有点晚,但可能有助于将来参考.我刚刚遇到了同样的问题,我认为这是因为宏是在工作表级别记录的.右键单击VBA项目窗口上的模块节点,单击插入模块,然后将宏粘贴到新模块中(确保删除工作表级别记录的宏).

希望这有帮助.

  • 这似乎正是问题所在!我使用的是在工作表级别记录的按钮,复制并粘贴到模块中,效果非常好!非常感谢! (2认同)

Zim*_*m84 8

我也有同样的问题,差点发疯。解决方案出乎意料。

我的 Excel 默认发货,我在 Excel 单元格中输入公式,如下所示:

=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example
Run Code Online (Sandbox Code Playgroud)

请注意,参数用分号分隔;。现在,如果您将该字符串完全粘贴到 VBA 中的公式中,例如:

Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work
Run Code Online (Sandbox Code Playgroud)

你会得到这个 1004 错误,完全没有解释。我花了几个小时来调试这个。你所要做的就是用逗号替换所有的分号。

Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
Run Code Online (Sandbox Code Playgroud)

  • 伙计,这太疯狂了,非常感谢你。我在这个问题上被封锁了好几个小时。这就是为什么我绝对讨厌 VBA (2认同)
  • 我和你有类似的问题,让我分享我的经验: Cells(1,20)=(F20/1000 * G20/1000) * K20 * 1,2 -> 这不起作用。Cells(1,20)=(F20/1000 * G20/1000) * K20 * 1.2 -> 这有效。唯一的区别是我将 1,2 中的 COMMA 替换为 DOT。+1让你分享你的解决方案并帮助找到我的。 (2认同)

小智 5

这样的事情我也经历过.在我的情况下,大多数工作表都处于保护模式(尽管与宏相关的单元格已解锁).当我在工作表上禁用保护时,宏工作正常......看起来VBA不喜欢锁定的单元格,即使它们没有被宏使用.