2017-02-11 45 views
0

试图动态创建一个使用此范围:动态创建范围后期绑定VBA

ws.Range(Cells(1, 1), Cells(q + 1, z + 1)).Value2 = xaRR 

这部作品在Excel中就像一个魅力,但进入VBA一直给我的问题。它不像细胞部分。恼人的是,这并不给我任何大惊小怪

ws.Cells(1,1).Value = blah blah blah 

当我试试这个:

 Dim oXL As Object: Dim wb As Object: Dim ws As Object: Dim rNg As Object: Dim cl As Object 
     Set wb = .Workbooks.Add 
     Set ws = wb.Sheets 
     Set rNg = ws.Range 
     Set cl = rNg.Cells 
     ws.rNg(cl(1, 1), cl(q + 1, z + 1)).Value2 = xaRR 

它说,RNG犯规支持此属性或方法。

有人能帮我看看这个明显的问题吗?

+0

您是否需要使用迟绑定? – Comintern

+0

@Comintern是的。由于环境的原因,我无法使用特定的Excel库引用。不幸的是,后期绑定是一项要求 –

+0

在Access中,使用'ws.'限定对'Cells'的调用 – ThunderFrame

回答

3

您的原始行使用对Activesheet的隐式引用。在Excel中,这是可行的(但如果你不打算使用Activesheet,则是一个错误),但在Access中它将是一个错误。限定细胞与调用纸张基准,对于显式调用:

我认为ws是一个Worksheet对象,而不是Worksheets对象

ws.Range(ws.Cells(1, 1), ws.Cells(q + 1, z + 1)).Value2 = xaRR 

或者在你的第二个例子:

我已经删除了Cells变量,并且我也用逗号分隔符取代了: Dim。指令分隔符是邪恶的。

您的ws变量是全部表,所以我刚抓住第一个,但您的实施可能需要改变。

Dim oXL As Object, wb As Object, ws As Object 
Set wb = .Workbooks.Add 
Set ws = wb.Sheets(1) 
ws.Range(ws.Cells(1, 1), ws.Cells(q + 1, z + 1)).Value2 = xaRR 
+0

显然设置rNg = ws.Range不是支持的方法或属性。我会继续尝试,直到我弄明白为止。 –

+1

看到我的编辑,你需要设置'ws'到一个*单*表,用'设置ws = wb.Sheets(1)'代替'设置ws = wb.Sheets' – ThunderFrame

+0

啊。我必须这样做,并拿出rNg参考,它像一个chamr一样工作。谢谢 –