猿问

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

选择范围时出现错误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

由于行数会经常变化,因此我需要在复制中花样。同样,下面的代码之前已被使用过,没有错误...但是在这种情况下没有使用。


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


慕慕森
浏览 1449回答 3
3回答

米琪卡哇伊

也许您的代码在Sheet1后面,所以当您将焦点更改为Sheet2时,找不到对象吗?在这种情况下,只需指定目标工作表可能会有所帮助:Sheets("Sheet1").Range("C21").Select我对Select的工作方式不是很熟悉,因为我尽量避免使用它:-)。您可以定义和操作范围,而无需选择它们。明确说明您引用的所有内容也是一个好主意。这样,如果您从一个工作表或工作簿转到另一个工作表或工作簿,就不会迷路。尝试这个:Option ExplicitSub 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").SelectEnd Sub

扬帆大鱼

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