Подтвердить что ты не робот

VBA Runtime Error 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
4b9b3361

Ответ 1

Возможно, ваш код стоит за 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

Ответ 2

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

Надеюсь на эту помощь.

Ответ 3

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

Ответ 4

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

Ответ 5

Вы можете получить сообщение об ошибке "Ошибка во время выполнения 1004" , когда программным способом установите массив большого массива в диапазон в Excel 2003

В Office Excel 2003, когда вы программно устанавливаете значение диапазона с массивом, содержащим большую строку, вы можете получить сообщение об ошибке, подобное следующему:

Ошибка времени выполнения '1004'. Определенная или определяемая операцией ошибка.

Эта проблема может возникнуть, если одна или несколько ячеек в массиве (диапазон ячеек) содержат строку символов, которая должна содержать более 911 символов.

Чтобы обойти эту проблему, отредактируйте script, чтобы никакие ячейки в массиве не содержали символьную строку, содержащую более 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 должен работать.

Ответ 6

Я мог бы удалить ошибку (ошибка времени выполнения "1004". Определенная пользователем или определяемая операцией ошибка) путем определения счетчиков как Single

Ответ 7

Вы должны пойти на лист 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

Ответ 8

У меня была аналогичная проблема, и я исправил ее с помощью следующих шагов:

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

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

Ответ 9

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

Ответ 10

У меня также была такая же проблема и почти с ума сошел. Решение было довольно неожиданным.

Мой Excel поставляется по умолчанию, что я ввожу формулы в Excel-Cell следующим образом:

=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

Ответ 11

У меня была аналогичная проблема при попытке петли на каждом листе книги. Чтобы решить эту проблему, я сделал что-то вроде этого

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

И он работал просто отлично

Надеюсь, вы сможете адаптировать его в своей ситуации.

Ответ 12

Вы можете использовать следующий код (например, если нужно было скопировать данные ячейки из Sheet2 в Sheet1).

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

Ответ 13

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

Ответ 14

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

Ответ 15

У меня тоже была аналогичная проблема. После копирования и вставки на листе я хотел, чтобы курсор/выбранная ячейка была 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

Ответ 16

Вам нужно выяснить фактическую причину этого общего кода ошибки: 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

Примечание. Отладка сочетаний клавиш, которые я использую на ПК: шаг в (F8), шаг вперед (Shift + F8), выход (Ctrl + Shift + F8)

Ответ 17

У меня возникла эта проблема во время разработки/отладки VBA внезапно, потому что какая-то (неизвестная мне) функция (ality) вызывала блокировку ячеек (возможно, переименование именованных ссылок на некотором проблемном этапе).

Разблокировка ячеек вручную работала нормально:

Выделите все ячейки листа (CTRL+A) и разблокируйте right click → cell formatting → protection → [ ] lock (может отличаться - перевод с немецкого: Zellen formatieren → Schutz → [ ] Gesperrt)