excel vba动态单元格区域获取对象错误

时间:2015-07-27 20:23:28

标签: excel vba excel-vba

我正在努力让动态细胞范围正常工作。我必须告诉我要使用的行数和列数。 (我不能使用xlToRight,因为我不想要单元格中的所有值。

到目前为止,我试过了:

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

错误消息是:未分配对象变量或With-block变量(我希望德语的翻译是正确的:-)调试器停在" workRange"一部分。

你能解释一下,我的想法有哪些错误?

由于

3 个答案:

答案 0 :(得分: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)

在不知道你如何声明xCountyCount的情况下,如果你刚刚Dim xCount, yCount,它将被设置为Variant(也就是任何东西)。您的原始声明将使Excel认为您想要一个范围(或单元格),而不是该单元格的值。如果您执行Dim xCount as Integer, yCount as Integer(或Long,如果您有大量行),那么它将获得该单元格的VALUE并将其用于该范围内的行。否则,如果您将xCount.Row设置为xCountVariant,则会使用Range

答案 1 :(得分:0)

我找到了解决方案!正如BruceWayne所说,我错过了一个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

卡兹

答案 2 :(得分:-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,du musst dem ganzen noch einen Wert zuweisen。

Setzte ein

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

dahinter。 Vielleicht funktioniert es dann。