Почему Excel VBA выдает ошибку для динамического диапазона? - PullRequest
1 голос
/ 15 сентября 2009

Я пытаюсь создать бюджет, используя функцию Match, но не могу даже добраться до этой точки, потому что динамический диапазон, который я пытаюсь создать, возвращает ошибку: «Ошибка приложения или объекта».

Рассматриваемый диапазон рнг

Sub Material()

Dim wSheet As Worksheet
Dim x, dwIndex, offSet, count, upperLeft, bottomRight, r, wall As Integer
Dim rng As Range

x = 0

For Each wSheet In Worksheets
    If wSheet.Name = "Drywall Pricing" Then
        dwIndex = wSheet.Index - 1
    End If
Next wSheet

For i = 1 To dwIndex
    If Sheets(i).Range("K1").Value > 0 Then
        count = 9
        offSet = 41
        r = 27
        For wall = 1 To count
            offSet = (offSet * wall) - (offSet * 1)
            upperLeft = (r + 16) + offSet
            bottomRight = (r + 27) + offSet
            rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1))
        Next wall
    End If
Next i

End Sub

Кто-нибудь знает, что переменная rng недопустима? Любая помощь была бы просто офигенной, потому что это смешно.

Заранее спасибо!

Ответы [ 7 ]

2 голосов
/ 15 сентября 2009

В дополнение к необходимости SET, ваши свойства Cells являются неквалифицированными, поэтому они будут возвращать Range из ActiveSheet. Исходя из вашего кода, я думаю, что вы хотите:

With Sheet(i) Set rng = .Range(.Cells(upperLeft, 0), .Cells(bottomRight, 1)) End With

Обратите внимание на периоды перед вызовами Cells.

2 голосов
/ 15 сентября 2009

Сначала нужно установить диапазон.

Set rng = Sheets(i).Range(Cells(upperLeft, 0), Cells(bottomRight, 1))
2 голосов
/ 15 сентября 2009

Попробуйте: Set rng = ..

Для любого назначения объекта требуется ключевое слово SET: -)

0 голосов
/ 15 сентября 2009

Также помните, что Match вернет ссылку на диапазон, а не числовое значение. Следовательно, вы получите ошибку объекта, если совпадения не найдено.

0 голосов
/ 15 сентября 2009

Я не уверен, что вызов CELLS правильный или неправильный, но я нашел способ заставить его работать.

Вот что я использую:

upperLeft = (ref + 16) + (offSet * wall)
bottomRight = (ref + 27) + (offSet * wall)
Set rng = Sheets(i).Range("A" & upperLeft & ":B" & bottomRight)

Ошибка перестала возникать с приведенной выше формулой.

Спасибо всем за ваши быстрые ответы. Впервые я использовал stackoverflow и думаю, что это моя новая любимая вещь.

0 голосов
/ 15 сентября 2009

Вы также неправильно объявили большинство переменных во втором выражении.

Дим х, у как целое число

объявляет только y как целое число, а x как вариант.

0 голосов
/ 15 сентября 2009

Какое значение upperLeft и bottomRight при возникновении ошибки?
Можно ли это перевести на существующий диапазон?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...