42

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

18 回答 18

29

也许您的代码在 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
于 2013-07-31T22:58:30.743 回答
21

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

于 2014-05-30T04:58:39.507 回答
12

我也有同样的问题,几乎快疯了。解决方案非常出乎意料。

默认情况下,我的 Excel 出厂时我在 Excel 单元格中输入公式,如下所示:

=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example

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

Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work

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

Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
于 2018-07-05T05:55:04.710 回答
8

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

于 2014-05-30T12:38:15.780 回答
3

Excel 中的某些操作受可用内存的限制。如果你一遍又一遍地重复相同的过程,它可能会产生内存溢出,excel 将无法再重复它。这发生在我尝试在同一个工作簿中创建多个工作表时。

于 2014-03-29T13:36:21.157 回答
3

当您以编程方式将大型数组字符串设置为 Excel 2003 中的范围时,您可能会收到“运行时错误 1004”错误消息

在 Office Excel 2003 中,当您使用包含大字符串的数组以编程方式设置范围值时,您可能会收到类似于以下内容的错误消息:

运行时错误“1004”。应用程序定义或操作定义的错误。

如果数组(单元格区域)中的一个或多个单元格包含设置为包含超过 911 个字符的字符串,则可能会出现此问题。

要变通解决此问题,请编辑脚本,以使数组中的任何单元格都不包含包含超过 911 个字符的字符串。

例如,下面示例代码块中的以下代码行定义了一个包含 912 个字符的字符串:

Sub XLTest()
Dim aValues(4)

  aValues(0) = "Test1"
  aValues(1) = "Test2"
  aValues(2) = "Test3"

  MsgBox "First the Good range set."
  aValues(3) = String(911, 65)

  Range("A1:D1").Value = aValues

  MsgBox "Now the bad range set."
  aValues(3) = String(912, 66)
  Range("A2:D2").Value = aValues

End Sub

其他版本的 Excel 或免费的替代品(如Calc)也应该可以使用。

于 2016-05-30T11:19:28.833 回答
2

您需要找出这个常见错误代码的实际原因:1004。编辑您的函数/VBA 代码并在调试模式下运行您的程序以识别导致它的行。然后,添加下面的代码来查看错误,

On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

注意:我在 PC 中使用的调试快捷键:Step Into (F8)、Step Over (Shift + F8)、Step Out (Ctrl + Shift + F8)

于 2018-04-16T04:08:23.673 回答
2

我可以通过将计数器定义为 Single 来消除错误(运行时错误“1004”。应用程序定义或操作定义的错误)

于 2017-01-06T12:47:24.380 回答
1

I had a similar issue, but it turns out I was just referencing a cell which was off the page {i.e. cells(i,1).cut cells (i-1,2)}

于 2017-03-20T15:07:57.447 回答
1

您可以使用以下代码(例如,如果想要将单元格数据从 复制Sheet2Sheet1)。

Sub Copy
Worksheets("Sheet1").Activate                    
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
于 2016-08-31T13:20:15.510 回答
1

我有一个类似的问题并修复了它应用这些步骤:

  1. 取消保护我要编辑的工作表
  2. 更改范围中每个单元格选择的范围(爆炸)

我希望这会对某人有所帮助。

于 2016-08-09T03:50:01.017 回答
1

你必须去 db 的工作表才能得到第一个空白行,你可以试试这个方法。

Sub DesdeColombia ()    
  Dim LastRowFull As Long

  'Here we will define the first blank row in the column number 1 of sheet number 1:
  LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row

  'Now we are going to insert information
  Sheet1.Cells(LastRowFull, 1).Value = "We got it"    
End Sub
于 2016-07-28T14:39:31.547 回答
0

我也有同样的问题,我解决了如下。
在宏中有一个名为 rownumber 的变量,最初我将其设置为零。这是错误,因为没有 excel 工作表包含行号为零。当我设置为 1 并增加我想要的。
现在它工作正常。

于 2018-02-14T05:16:53.260 回答
0

我在 VBA 开发/调试期间突然遇到了这个问题,因为某些(我不知道的)功能(特性)导致单元格被锁定(可能在某个有问题的阶段重命名了命名引用)。

手动解锁单元格工作正常:

选择所有工作表单元格 ( CTRL+A) 并解锁right click -> cell formatting -> protection -> [ ] lock(可能不同 - 翻译自德语Zellen formatieren -> Schutz -> [ ] Gesperrt:)

于 2019-06-05T08:50:09.830 回答
0

我也有类似的问题。复制并粘贴到工作表后,我希望光标/所选单元格为 A1 而不是我刚刚粘贴到的范围。

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet("A1").Select

但收到 400 错误,实际上是 1004 错误

您需要在更改所选单元格之前激活工作表这有效

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet.Activate
wkSheet("A1").Select
于 2018-04-07T11:10:36.953 回答
0

我遇到了同样的问题,发现创建工作表的人有几列被锁定。我删除了保护,一切都按设计工作。

于 2017-02-20T18:04:32.063 回答
0

只是想添加一个额外的修复,因为我以前从未遇到过它:

我的一个用户在从 Excel 工作簿中提取信息时遇到了这个运行时错误,但仅在他的台式计算机上,即使它的硬件和软件与他的笔记本电脑几乎相同(相同数量的内存、操作系统、Office 配置等)。 )。

事实证明,连接到他的台式计算机的显示器太大 - 解决方案/解决方法是打开一个空白 Excel 文件,缩小 Excel 窗口,然后打开他遇到问题的文件。

由于这是由第三方生成的文件 - 我们无法编辑/实施任何先前建议的修复程序,更改宏或保护设置也没有任何作用(无论如何他们在他的笔记本电脑上使用相同的设置工作)。

于 2021-07-17T17:21:45.660 回答
0

尝试循环工作簿的每张纸时,我遇到了类似的问题。为了解决它,我做了这样的事情

dim mySheet as sheet

for each mysheet in myWorkbook.sheets

    mySheet.activate
    activesheet.range("A1").select

    with Selection
    'any wanted operations here
    end with

next

它工作得很好

我希望你能适应你的情况

于 2016-05-04T21:27:12.517 回答