Ошибка выполнения VBA 1004 Ошибка, определяемая приложением или объектом

Здравствуйте, я новичок в VB, и я пытаюсь скопировать данные с одного листа книги на другой лист другой книги, но когда я пытаюсь это сделать, я получаю сообщение об ошибке:

"Error 1004: Application-defined or Object-defined Error"

Тот же код дал требуемый результат, но он не работает каждый раз.

Найдите данные для выбранной пользователем даты в рабочем листе Working файла Weather Dashboard в файле MasterSheet1 и вставьте в Weather Dashboard.

Главный файл содержит 200000 строк данных, а общий объем копируемых данных составит около 1000 строк.

Private Sub CommandButton1_Click()
    Windows("Weather Dashboard.xlsm").Activate
    stra = Worksheets("Working").Cells(1, 1)

    'stores user input date as integer in stra
    Workbooks.Open Filename: = "C:\Users\Desktop\Master.xlsx"
    Worksheets("Sheet1").Select
    a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For j = 0 To 9
        For i = 2 To a
            'Search for the chosen date & following 9 days from Master File
            If Worksheets("Sheet1").Cells(i, 5).Value = stra + j Then
                Worksheets("Sheet1").Rows(i).Copy
                Windows("Weather Dashboard.xlsm").Activate
                b = Worksheets("Working").Cells(Rows.Count, 1).End(xlUp).Row
                Worksheets("Working").Cells(b + 1, 1).Select

                ActiveSheet.Paste

                Windows("Master.xlsx").Activate
                Worksheets("Sheet1").Activate
            End If
        Next i
    Next j
    Application.CutCopyMode = False
End Sub

Для каждой даты будет 96 строк данных, следовательно, итерация i.

Antip 01.05.2018 15:56

В какой строке выдает ошибку?

JNevill 01.05.2018 15:58

он показывает ошибку после открытия самого файла.

Antip 01.05.2018 15:59

Я вижу .copy. Вставляет ли этот код каждый раз копируемые данные? Похоже, это действительно громоздкий фрагмент кода, который просто находит диапазон, копирует его и все.

JNevill 01.05.2018 15:59

начало цикла For (j)

Antip 01.05.2018 15:59

да, он копирует данные там, где он находит совпадение.

Antip 01.05.2018 16:01

А вот линейки .paste нет. Был ли Worksheets("Working").Cells(b + 1, 1).Select заменен на .Select вместо .paste в какой-то момент? Я думаю, что это не связано с вашей проблемой, но я хотел разобраться в коде в надежде обнаружить проблему, с которой вы столкнулись.

JNevill 01.05.2018 16:02

Моим первым предложением было бы добавить строку вверху [каждого] модуля [всегда]: Option Explicit, которая поможет «заставить» вас правильно объявлять и обрабатывать ваши переменные, объекты, свойства и т. д.

ashleedawg 01.05.2018 16:02

Как найти ассортимент? Например: будет 90 строк на 1 день, и мне нужны данные за день с 20 апреля по 28 апреля. Как изменить код для этого? Я пробовал итерацию, но при этом также получаю ту же ошибку «Ошибка, определяемая объектом».

Antip 01.05.2018 16:03

Функция вставки будет после функции выбора. Пожалуйста, проверьте отредактированный вопрос

Antip 01.05.2018 16:07

В зависимости от выбранной пользователем даты, скажем, 20 апреля, код должен выполнить поиск по всем строкам, содержащим 20 апреля, одну за другой из основного файла и скопировать в файл панели мониторинга погоды (96 строк будут совпадать, и их нужно скопировать и вставить). Это нужно повторять в течение 9 следующих дней.

Antip 01.05.2018 16:17

Почему бы не использовать AutoFilter, чтобы отфильтровать необходимый диапазон дат для копирования, а затем скопировать видимые ячейки в отфильтрованном диапазоне. Более эффективно, чем зацикливание.

Scott Holtzman 01.05.2018 16:54

@Antip Избавьтесь от Select и Activate и полностью определите свои диапазоны (например, Rows.Count).

dwirony 01.05.2018 17:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
447
1

Ответы 1

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

Option Explicit
Private Sub CommandButton1_Click()
dim a as long
dim b as long
Dim Stra as integer
dim wbDash as workbook
set wbDash =  workbooks("Weather Dashboard.xlsm")   
stra =wbdash.Worksheets("Working").Cells(1, 1)
dim wb as workbook
'stores user input date as integer in stra
set wb = Workbooks.Open("C:\Users\Desktop\Master.xlsx")
with wb.Worksheets("Sheet1")
    a = .Cells(.Rows.Count, 1).End(xlUp).Row

    For j = 0 To 9
        For i = 2 To a
            'Search for the chosen date & following 9 days from Master File
            If .Cells(i, 5).Value = stra + j Then
                 b = wbdash.Worksheets("Working").Cells(Rows.Count, 1).End(xlUp).Row
               .Rows(i).Copy _
                  destination:=
                wbdash.Worksheets("Working").Cells(b + 1, 1)


            End If
        Next i
    Next j
end with   
End Sub

Я думаю это избавит от твоей ошибки

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

Antip 01.05.2018 18:32

b = wbdash.Worksheets ("Рабочий"). Ячейки (Rows.Count, 1) .End (xlUp) .Row .Rows (i) .Copy _ destination: = wbdash.Worksheets ("Рабочий"). Ячейки (b + 1, 1)

Antip 01.05.2018 18:32

Он показывает ошибку «переполнение ошибки времени выполнения 6» даже после того, как параметр итерации i был задан как Long. Пожалуйста, советую!

Antip 01.05.2018 22:57

что должно быть? он задан как целое число, но может быть длинным?

Harassed Dad 02.05.2018 10:56

stra в основном хранит значение даты в целочисленном виде .. его можно установить до тех пор

Antip 02.05.2018 15:28

даты являются длинными (технически удваиваются, если они также содержат время). Сегодняшняя дата - 43 223, максимальное целое число - 32 767.

Harassed Dad 03.05.2018 14:25

Другие вопросы по теме