动态创建范围后期绑定VBA

时间:2017-02-11 21:22:51

标签: vba access-vba late-binding

尝试使用以下方法动态创建范围:

s = '("8# " + str" #9 " + line) #lots of hash(#) symbols here'
quoteCount = 0

for char in s:
    if quoteCount%2 == 0:
        if char == '#':
            s = s[s.index('#'):]
            break

    if char == '"':
        quoteCount = quoteCount + 1
        s = s[s.index('"'):]
        s = s.lstrip('"')
        for char in s:
            if char == '"':
                quoteCount = quoteCount + 1
                s = s[s.index('"'):]
                s = s.lstrip('"')
                print(s)
                break

print(s)

这在excel中起作用就像一个魅力,但访问vba一直给我一个问题。它不喜欢细胞部分。令人烦恼的是,这并没有给我任何大惊小怪

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

当我尝试这个时:

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

它说rNg不支持这个属性或方法。

有人可以帮助我看到明显的问题吗?

1 个答案:

答案 0 :(得分:3)

您的原始行正在使用对Activesheet的隐式引用。在Excel中,这是有效的(但如果您不打算使用Activesheet则是一个错误),但在Access中它将是一个错误。使用工作表引用限定Cells调用,以进行显式调用:

我认为wsWorksheet个对象,而不是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