Ошибка VBA 1004-ошибка выбора метода класса диапазона
первый раз плакат, поэтому, если есть какое-либо форматирование или рекомендации, которые я не смог придерживаться, пожалуйста, дайте мне знать, чтобы я мог это исправить.
поэтому я в основном спрашиваю пользователя о каталоге файлов файла excel, затем я устанавливаю некоторые переменные (первоначально установленные в public как переменные проекта, так как они использовались и изменялись в других местах). Я также добавил строки, чтобы установить эти переменные в ничто (на всякий случай, я не думаю, что это должно иметь значение). Затем я установил эти переменные для файла excel, книги и листов, к которым я хочу получить доступ.
Dim filepath as String
filePath = CStr(fileDialog) 'ask file dir, set to string
Dim sourceXL As Variant 'these three were orig project variables
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceXL = Nothing 'set to nothing in case...?
Set sourceBook = Nothing
Set sourceSheet = Nothing
Set sourceSheetSum = Nothing
Set sourceXL = Excel.Application 'set to the paths needed
Set sourceBook = sourceXL.Workbooks.Open(filePath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")
Dim measName As Variant 'create variable to access later
Dim partName As Variant
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
measName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
sourceSheetSum.Range("D3").Select
partName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
поэтому я создал две разные переменные листа "sourceSheets" и "sourceSheetsSum", код работает, если я использую "sourceSheets", но ошибка 1004 возникает, если я использую "sourceSheetsSum". Я также попробовал код с переменной "sourceSheet", полностью удаленной, в случае, если это по какой-то причине переопределяло "sourceSheetSum".
Я довольно уверен, что книга excel и листы существуют и вызываются правильно, так как я запустил быстрый бит кода, чтобы перебрать все листы в книге и вывести имена, показанные ниже.
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
С выходом отладки
измерения
Резюме Анализа
Настройки Анализа
Итак, есть ли у кого-нибудь идеи, что может означать эта ошибка, или как я могу найти больше о том, что такое ошибка на самом деле?
изменить: Поэтому я решил чтобы добавить немного в список имен листов, не уверен, поможет ли это вообще.
For j = 1 To sourceBook.Sheets.Count
listSheet(j) = Sheets(j).name
Next j
Debug.Print (listSheet(2))
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
отладка печатает резюме анализа, поэтому я знаю, что лист существует в книге, и не должно быть никаких проблем с "опечаткой" в именах.
Однако код по-прежнему имеет ту же ошибку в той же строке.
deusxmach1na: я думаю, вы хотели, чтобы я изменился
Dim sourceXL As Variant
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceSheet = sourceBook.Sheets("Measurements")
до
Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceSheet = sourceBook.Worksheets("Measurements")
но это не меняет ошибку, я помню, что у меня был он похож на это, а затем изменил его, так как я прочитал, что вариант похож на улов все, а не на то, что твердый на том, что вариант.
4 ответов
перед выбором диапазона необходимо выбрать лист.
я упростил пример, чтобы локализовать проблему. Попробуйте это:
Option Explicit
Sub RangeError()
Dim sourceBook As Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceBook = ActiveWorkbook
Set sourceSheet = sourceBook.Sheets("Sheet1")
Set sourceSheetSum = sourceBook.Sheets("Sheet2")
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
End Sub
замените листы 1 и 2 именами листов.
ВАЖНОЕ ПРИМЕЧАНИЕ: использование вариантов опасно и может привести к трудноубиваемым ошибкам. Используйте их, только если у вас есть очень конкретная причина для этого.
вы не можете выбрать диапазон, не выбрав сначала лист, в котором он находится. Попробуйте сначала выбрать лист и посмотреть, если вы все еще получаете проблему:
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
ассилии и глава общественного питания уже дали вам причину, почему происходит ошибка.
теперь относительно того, что вы делаете, из того, что я понимаю, вам не нужно использовать Select
на всех
Я думаю, вы делаете это из VBA PowerPoint? Если да, то ваш код будет переписан как
Dim sourceXL As Object, sourceBook As Object
Dim sourceSheet As Object, sourceSheetSum As Object
Dim lRow As Long
Dim measName As Variant, partName As Variant
Dim filepath As String
filepath = CStr(FileDialog)
'~~> Establish an EXCEL application object
On Error Resume Next
Set sourceXL = GetObject(, "Excel.Application")
'~~> If not found then create new instance
If Err.Number <> 0 Then
Set sourceXL = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0
Set sourceBook = sourceXL.Workbooks.Open(filepath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")
lRow = sourceSheetSum.Range("C" & sourceSheetSum.Rows.Count).End(xlUp).Row
measName = sourceSheetSum.Range("C3:C" & lRow)
lRow = sourceSheetSum.Range("D" & sourceSheetSum.Rows.Count).End(xlUp).Row
partName = sourceSheetSum.Range("D3:D" & lRow)