尝试使用以下方法动态创建范围:
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不支持这个属性或方法。
有人可以帮助我看到明显的问题吗?
答案 0 :(得分:3)
您的原始行正在使用对Activesheet的隐式引用。在Excel中,这是有效的(但如果您不打算使用Activesheet则是一个错误),但在Access中它将是一个错误。使用工作表引用限定Cells调用,以进行显式调用:
我认为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