2015-07-27 2 views
0

Я пытаюсь получить динамический диапазон ячеек. У меня есть значения, которые указывают мне количество строк и столбцов. (Я не могу использовать xlToRight, так как я не хочу, чтобы все значения, которые находятся в клеткахexcel vba dynamic cell range get object error

До сих пор я пытался:.

Dim xCount As Long 
Dim yCount As Long 
Dim workRange As Range 

xCount = Worksheets("Controls").Range("B4") 
yCount = Worksheets("Controls").Range("B5") 

workRange = Worksheets("Data").Range(Worksheets("Data").Cells(1,1), Cells(xCount, yCount) 
ActiveChart.SetSourceData Source:=workRange 

Сообщение об ошибке является: Objectvariable или С-blockvariable не назначен (я надеюсь, что перевод с немецкого правильно :-) Отладчик останавливается на части «workRange».

Не могли бы вы объяснить мне, какая часть моего мышления не так?

Благодарности

ответ

0

Я нашел решение! Как сказал БрюсВейн, мне не хватает одного Worksheets("Controls"). Но этого было недостаточно, чтобы удалить ошибку.

У меня было set отсутствует при заполнении диапазона до workRange. Для получения правильного кода, вот полный пример:

Dim xCount As Long 
Dim yCount As Long 
Dim workRange As Range 

With worksheets("Controls") 
    xCount = .Range("B4").Value 
    yCount = .Range("B5").Value 
End with 

With Worksheets("Data") 
    set workRange = .Range(.Cells(1,1), .Cells(xCount, yCount)) 
end with 

ActiveChart.SetSourceData Source:=workRange 

Спасибо за помощь всем!:-D

Kaz

+0

Интересно, будет ли работать' ActiveChart.SetSourceData Source: =. Range (.Cells (1,1), .Cells (xCount, yCount)) '. Поскольку вы используете переменную только тогда, когда я думаю вы можете применять диапазон непосредственно без каких-либо проблем –

1

Вы почти получили его, вы явно дали workRange рабочий лист для первой ячейки, вам нужно сделать это со вторым тоже. Мне нравится использовать with, чтобы помочь прояснить эти вещи:

With worksheets("Controls") 
xCount = .Range("B4").Value ' I assume this is some number 
yCount = .Range("B5").Value 
End with 

With Worksheets("Data") 
workRange = .Range(.Cells(1,1), .Cells(xCount, yCount)) 
end with 

ActiveChart.SetSourceData Source:=workRange 

Если это не сделать это, просто попробуйте workRange = Worksheets("Data").Range(Worksheets("Data").Cells(1,1), Worksheets("Data").Cells(xCount, yCount)

Не зная, как вы объявили xCount и yCount, если вы только что сделали Dim xCount, yCount он будет установлен как вариант (он же что-то). Ваши оригинальные объявления затем заставят Excel подумать, что вы хотите использовать диапазон (или ячейку), а не значение этой ячейки. Если вы сделали Dim xCount as Integer, yCount as Integer (или Long, если у вас есть большое количество строк), тогда он получит VALUE этой ячейки и будет использовать это для ваших строк в диапазоне. В противном случае вы будете использовать xCount.Row, если вы установили xCount как Variant или Range.

+0

Ударьте меня на 30 секунд! –

+0

Я сделал, как вы сказали, и попытался с отсутствующими «рабочими листами», а также попробовал «с», но оба результата по-прежнему приводят к тому же сообщению об ошибке. Если я просто объявляю «Dim workrange» без какого-либо типа, ошибка возникает позже (строка «ActiveChart»), и она говорит «нужен объект» Так что в моем мышлении или в моем коде есть что-то не так. – Kazschuri

+0

Я нашел ответ. Я забыл «установить» workRange. Я поставил полный код в другом ответе. Спасибо за помощь – Kazschuri

-2

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

workRange = Worksheets("Data").Range(Worksheets("Data").Cells(1,1), Cells(xCount, yCount).Value = 5 

Это должно написать 5 внутри коробки.

Может быть, это помогает:

http://www.excel-easy.com/vba/range-object.html

https://msdn.microsoft.com/de-de/library/office/Ff838238.aspx


Ich Glaube, дю musst дем Ганзен Noch Einen Wert zuweisen.

Setzte Эйн

.... Cells(xCount, yCount).Value = 5 

dahinter. Vielleicht funktioniert es dann.

+0

Это не сработает. То, что это будет делать, - это присвоить переменной «workflow» значение «FALSE», потому что «Worksheets» («Данные»). Диапазон (рабочие листы («данные»). Ячейки (1,1), ячейки (xCount, yCount). 'не равно 5 –