Здравствуйте, я новичок в VB, и я пытаюсь скопировать данные с одного листа книги на другой лист другой книги, но когда я пытаюсь это сделать, я получаю сообщение об ошибке:
"Error 1004: Application-defined or Object-defined Error"
Тот же код дал требуемый результат, но он не работает каждый раз.
Найдите данные для выбранной пользователем даты в рабочем листе Working
файла Weather Dashboard
в файле Master
Sheet1
и вставьте в 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
В какой строке выдает ошибку?
он показывает ошибку после открытия самого файла.
Я вижу .copy
. Вставляет ли этот код каждый раз копируемые данные? Похоже, это действительно громоздкий фрагмент кода, который просто находит диапазон, копирует его и все.
начало цикла For (j)
да, он копирует данные там, где он находит совпадение.
А вот линейки .paste
нет. Был ли Worksheets("Working").Cells(b + 1, 1).Select
заменен на .Select
вместо .paste
в какой-то момент? Я думаю, что это не связано с вашей проблемой, но я хотел разобраться в коде в надежде обнаружить проблему, с которой вы столкнулись.
Моим первым предложением было бы добавить строку вверху [каждого] модуля [всегда]: Option Explicit
, которая поможет «заставить» вас правильно объявлять и обрабатывать ваши переменные, объекты, свойства и т. д.
Как найти ассортимент? Например: будет 90 строк на 1 день, и мне нужны данные за день с 20 апреля по 28 апреля. Как изменить код для этого? Я пробовал итерацию, но при этом также получаю ту же ошибку «Ошибка, определяемая объектом».
Функция вставки будет после функции выбора. Пожалуйста, проверьте отредактированный вопрос
В зависимости от выбранной пользователем даты, скажем, 20 апреля, код должен выполнить поиск по всем строкам, содержащим 20 апреля, одну за другой из основного файла и скопировать в файл панели мониторинга погоды (96 строк будут совпадать, и их нужно скопировать и вставить). Это нужно повторять в течение 9 следующих дней.
Почему бы не использовать AutoFilter
, чтобы отфильтровать необходимый диапазон дат для копирования, а затем скопировать видимые ячейки в отфильтрованном диапазоне. Более эффективно, чем зацикливание.
@Antip Избавьтесь от Select
и Activate
и полностью определите свои диапазоны (например, Rows.Count
).
Я просто переписываю, чтобы удалить здесь неявные ссылки: никаких других проблем не решаю
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
Я думаю это избавит от твоей ошибки
Можете ли вы просто написать код еще раз для цикла .. тот, который вы написали, показывает некоторую синтаксическую ошибку ..
b = wbdash.Worksheets ("Рабочий"). Ячейки (Rows.Count, 1) .End (xlUp) .Row .Rows (i) .Copy _ destination: = wbdash.Worksheets ("Рабочий"). Ячейки (b + 1, 1)
Он показывает ошибку «переполнение ошибки времени выполнения 6» даже после того, как параметр итерации i был задан как Long. Пожалуйста, советую!
что должно быть? он задан как целое число, но может быть длинным?
stra в основном хранит значение даты в целочисленном виде .. его можно установить до тех пор
даты являются длинными (технически удваиваются, если они также содержат время). Сегодняшняя дата - 43 223, максимальное целое число - 32 767.
Для каждой даты будет 96 строк данных, следовательно, итерация i.