Ошибка VBA Runtime 1004 в Range.Clear
Об этой ошибке много сообщений, но я не могу заставить это работать независимо от того, что я пытаюсь. Большинство людей говорят, что это происходит, когда вы пытаетесь вызвать метод на неактивном листе, но вам не нужно это делать. Ошибка в строке 28. Спасибо.
Private Sub CommandButton1_Click() Dim x As Integer Dim boisePaste As Integer Dim jrgPaste As Integer Dim master As Integer Dim lastRow As Integer Dim bookCount As Integer bookCount = Application.Workbooks.Count For x = 1 To bookCount If Left(Application.Workbooks(x).Name, 14) = "ITEM_INVENTORY" Then boisePaste = x ElseIf Left(Application.Workbooks(x).Name, 6) = "report" Then jrgPaste = x ElseIf Left(Application.Workbooks(x).Name, 8) = "Portland" Then master = x End If next x 'Unhide sheets and delete Boise range' Application.ActiveWorkbook.Sheets("BoisePaste").Visible = True Sheets("JRGpaste").Visible = True lastRow = Sheets("BoisePaste").Cells(Rows.Count, "B").End(xlUp).Row Sheets("BoisePaste").Range(Cells(1,2), Cells(lastRow, 23)).Clear 'Open Boise file and copy range, paste in master' Application.Workbooks(boisePaste).Activate With ActiveSheet .Range(.Cells(1,1), .Cells((.Cells(Rows.Count, "A").End(xlUp).Row),22)).Copy End With Application.Workbooks(master).Sheets("BoisePaste").Range(B1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False 'Open JRG report and copy range, paste in master' Application.Workbooks(jrgPaste).Activate ActiveSheet.Cells.Copy Application.Workbooks(master).Sheets("JRGpaste").Range(A1).Paste Application.CutCopyMode = False 'Refresh pivot tables; hide sheets' Application.Workbooks(master).Activate With ActiveWorkbook .RefreshAll .RefreshAll .Sheets("BoisePaste").Visible = False .Sheets("BoisePaste").Visible = False End With End Sub
- Ошибка времени выполнения 424. VBA, если рабочий лист называется «Выполняется», затем выполните код Else Msg Box
- Ошибка времени выполнения 9 в vba
- Ошибка выполнения «9» в VBA - Подрезка вне диапазона
- Ошибка времени выполнения «1004» при вводе формулы
- VBA: диапазон копирования. ошибка времени выполнения 9 - индекс вне диапазона
- Код ошибки VBA. Обязательный объект - тройной флажок, но все еще не работает.
- Ошибка 2042 на десятичных числах application.match vba
- Ошибка 6 с длинной переменной в Excel VBA
- Ошибка -2147417848 (& H80010108): вызванный объект отключился от своих клиентов
- Как пропустить ошибку времени выполнения 9 vba?
- Ошибка выполнения 5631
- Я продолжаю получать ошибку #value в Excel VBA
- Коллеги получают ошибку 5 в Excel-файле с VBA, но тот же файл отлично работает на моем компьютере?
Вам нужно явно указать, на каком листе вы хотите, чтобы Rows.Count
и другие такие виды использования Range ( Columns
, Rows
, Cells
и т. Д.) Rows.Count
включены.
Попробуй это:
Sheets("BoisePaste").Range(Sheets("BoisePaste").Cells(1,2), Sheets("BoisePaste").Cells(lastRow, 23)).Clear
Итак, пройдите свой код и убедитесь, что вы это делаете везде … то есть в .Range(.Cells(1,1), .Cells((.Cells(Rows.Count, "A").End(xlUp).Row),22)).Copy
, вы не сделали это для Rows.Count
, поэтому добавьте там лист, чтобы предотвратить любые неожиданные действия.
Подумайте об этом, возможно, с линией
myVariable = Sheets("mySheet").Range(Cells(1,1),Cells(1,2)).Value
VBA читает это как
В
mySheet
найдите диапазон. Какой диапазон? Hm, пользователь говоритCells(1,1)
иCells(1,2)
, но какой лист он хочет? Текущая действующая таблица называетсяyourSheet
… Он указал, где должен бытьRange
(лист называетсяmySheet
), но он не наCells()
, поэтому я не знаю, чего он хочет!mySheet cells(1,1)
илиyourSheet cells(1,1)
?
(и да, именно так думает компьютер: P)
Изменить: я прошел и попытался подтянуть ваш код. Но, как вы можете видеть, возможно, я не совсем уверен в том, что вы хотите сделать, но это должно дать вам некоторую помощь / понимание:
Private Sub CommandButton1_Click() Dim x As Integer Dim boisePaste As Integer Dim jrgPaste As Integer Dim master As Integer Dim lastRow As Integer Dim bookCount As Integer bookCount = Application.Workbooks.Count ' Create variables to hold the workbook and sheet names. Dim jrgWS As Worksheet, boiseWS As Worksheet Dim masterWB As Workbook Set masterWB = Workbooks(master) Set jrgWS = Sheets("JRGPaste") Set boiseWS = Sheets("BoisePaste") For x = 1 To bookCount If Left(Application.Workbooks(x).Name, 14) = "ITEM_INVENTORY" Then boisePaste = x ElseIf Left(Application.Workbooks(x).Name, 6) = "report" Then jrgPaste = x ElseIf Left(Application.Workbooks(x).Name, 8) = "Portland" Then master = x End If Next x 'Unhide sheets and delete Boise range' Application.ActiveWorkbook.Sheets("BoisePaste").Visible = True jrgWS.Visible = True With boiseWS lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row .Range(.Cells(1, 2), .Cells(lastRow, 23)).Clear End With 'Open Boise file and copy range, paste in master' '' DONT USE ACTIVE SHEET! Use your variables instead 'Application.Workbooks(boisePaste).Activate With boiseWS 'Since you want values (xlPasteValues), just set the two ranges equal instead of copy/paste .Range("B1").Value = .Range(.Cells(1, 1), .Cells((.Cells(.Rows.Count, "A").End(xlUp).Row), 22)).Value End With 'Open JRG report and copy range, paste in master' ' The below just pastes into the same sheet, no?? jrgWS.Cells.Copy jrgWS.Range("A1").Paste Application.CutCopyMode = False 'Refresh pivot tables; hide sheets' Application.Workbooks(master).Activate With ActiveWorkbook .RefreshAll .RefreshAll .Sheets("BoisePaste").Visible = False End With End Sub