为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-11-20 09:37:33
选择范围时出现错误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").SelectEnd Sub由于行数会经常变化,因此我需要在复制中花样。同样,下面的代码之前已被使用过,没有错误...但是在这种情况下没有使用。Dim CLastFundRow As IntegerDim CFirstBlankRow As Integer'Finds last row of contentWindows("Excel.xlsm").ActivateSheets("Sheet1").ActivateRange("C21").Select     '>>>Error 1004 "Application-defined or Object-defined error" OccursSelection.End(xlDown).SelectCLastFundRow = ActiveCell.Row'Finds first row without contentCFirstBlankRow = CLastFundRow + 1
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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


Sheets("Sheet1").Range("C21").Select

我对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


查看完整回答
反对 回复 2019-11-20
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

这样的事情我也经历过。在我的情况下,大多数工作表都处于保护模式(尽管与宏相关的单元已解锁)。当我在工作表上禁用保护时,宏工作正常……似乎VBA不喜欢锁定的单元格,即使宏未使用它们也是如此。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 1448 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信