2013-07-31 4 views
13

При выборе диапазона возникает проблема с ошибкой 1004 «Определенная пользователем или определяемая объектами ошибка».Ошибка VBA Runtime 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

Всегда лучше избегать использования. Выберите: https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros – citizenkong

ответ

17

Возможно, ваш код находится за листом1, поэтому, когда вы меняете фокус на Sheet2, объекты не могут быть найдены? Если это так, просто указав ваш целевой рабочий лист может помочь:

Sheets("Sheet1").Range("C21").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 
+1

Отделив копию от прошлого, как сказано в этом документе Ответ сделал трюк для нас. Спасибо –

2

Некоторые операции в Excel ограничены доступной памятью. Если вы повторяете один и тот же процесс снова и снова, это может привести к переполнению памяти, и excel больше не сможет его повторять. Это случилось со мной, пытаясь создать несколько листов в одной книге.

8

Немного поздно, но может быть полезно для использования в будущем. У меня была одна и та же проблема, и я думаю, это потому, что макрос записывается на уровне рабочей таблицы. Щелкните правой кнопкой мыши узел модулей в окне проекта VBA, нажмите на модуль вставки, затем вставьте свой макрос в новый модуль (убедитесь, что вы удалили тот, который был записан на уровне листа).

Надеюсь, что эта помощь.

+0

Это, похоже, проблема! Я использовал кнопку, записанную на уровне листа, скопированную и вставленную в модуль, и она работала удивительно! Большое спасибо! – seadoggie01

4

То же самое случилось со мной. В моем случае большая часть рабочего листа находилась в защищенном режиме (хотя ячейки, относящиеся к макросу, были разблокированы). Когда я отключил защиту на листе, макрос работал нормально ... кажется, VBA не любит заблокированные ячейки, даже если они не используются макросом.

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 

И он работал нормально

Я надеюсь, что вы можете адаптировать его в вашей ситуации

0

You may receive a "Run-time error 1004" error message when you programmatically set a large array string to a range in Excel 2003

В 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 или свободный alternatives как Calc должны работать.

1

Вы должны пойти к листу дб, чтобы получить первую пустую строку, вы можете сделать это следующим образом:

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 gonna introduce some information there, then here we go: 
    Sheet1.Cells(LastRowFull, 1).Value = "We got it"  
End Sub 
1

У меня была аналогичная проблема & установил ее применения следующие действия:

  1. Снятие защиты листа, который я хочу изменить
  2. Изменение диапазона, что я выбранный каждой отдельной ячейки в диапазоне (разобранном)

Надеюсь, это поможет кому-то.

0

и можно использовать следующий код (например и хотят скопировать некоторые клетки от листа 2 к листу 1)

Sub Copy 
Worksheets("Sheet1").Activate      
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_ 
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1) 
End Sub 
1

Я мог бы устранить ошибку (Ошибка выполнения «1004». Приложение или определенная ошибка) путем определения счетчиков как Single

0

Я столкнулся с той же проблемой и обнаружил, что у человека, создавшего рабочий лист, было заблокировано несколько столбцов. Я удалил защиту, и все сработало, как было разработано.

1

У меня была аналогичная проблема, но, оказывается, я просто ссылался на ячейку, которая была на странице (т. Ячейки (i, 1) .cut (i-1,2)}

0

У меня также такая же проблема, и я решил, как показано ниже.
В макросе есть переменная, называемая rownumber, и изначально я устанавливаю ее как ноль. это ошибка, потому что никакой лист excel не содержит номер строки как ноль. когда я устанавливаю как 1 и увеличиваю то, что хочу.
сейчас его рабочий штраф.

Смежные вопросы