Ошибка VBA 1004 - выбор метода класса диапазона не выполнен - программирование
Подтвердить что ты не робот

Ошибка VBA 1004 - выбор метода класса диапазона не выполнен

Плакат первого раза, поэтому, если есть какое-либо форматирование или рекомендации, к которым я не смог присоединиться, сообщите мне, чтобы я мог это исправить.

Итак, я в основном прошу пользователя создать каталог файлов excel, затем я устанавливаю некоторые переменные (изначально устанавливаемые в качестве переменных проекта, поскольку они были использованы и изменены в других местах). Я также добавил строки, чтобы эти переменные ни к чему (на всякий случай, я не думаю, что это имеет значение). Затем я устанавливаю эти переменные в файл 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

С отладочным выходом

Измерения
Резюме анализа
Настройки анализа

Итак, есть ли у кого-нибудь идеи, что может означать эта ошибка, или как я могу найти больше о том, что такое ошибка на самом деле?

EDIT: Поэтому я решил добавить немного к списку имен листов, не уверен, что это вообще поможет.

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")

To

Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet

Set sourceSheet = sourceBook.Worksheets("Measurements")

Но это не меняет ошибки, я помню, что у меня было это похоже на это, а затем изменил его, так как я читал, что этот вариант похож на уловку, а не на то, что твердое в каком варианте.

4b9b3361

Ответ 1

Вам нужно выбрать лист, прежде чем вы сможете выбрать диапазон.

Я упростил этот пример, чтобы изолировать проблему. Попробуйте следующее:

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 вашими именами листов.

ВАЖНОЕ ПРИМЕЧАНИЕ: Использование вариантов опасно и может привести к ошибкам, затрудняющим убийство. Используйте их только в том случае, если у вас есть очень конкретная причина для этого.

Ответ 2

Вы не можете выбрать диапазон, не выбрав первый лист, в котором он находится. Попробуйте сначала выбрать лист и посмотреть, есть ли у вас проблема:

sourceSheetSum.Select
sourceSheetSum.Range("C3").Select

Ответ 3

assylias и Head of Catering уже дали вам причину, по которой происходит ошибка.

Теперь о том, что вы делаете, из того, что я понимаю, вам вообще не нужно использовать 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)

Ответ 4

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