Ошибка 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)

удаление диапазона выберите, прежде чем копия работала для меня. Спасибо за сообщения.