我已经写了一大堆VBA代码,不幸的是它最简单的部分是行不通的。我只需要打开一个特定的工作簿(名称不会改变)并在其中绘制边框。写入它的My Sub工作正常,但是当我尝试绘制任何边框时,它会在与VBA代码关联的工作表中绘制它们,而不是它打开的那个。下面的代码是我尝试修复它(为方便起见,我已将其移动到自己的Sub)但错误1004在ActiveSheet.Range(rRng).BorderAround xlContinuous
我不怀疑这是显而易见的事情,但我不能为我的生活看到它的位置。例如。 xl0.ActiveSheet.Range(rangeAA) = CardDataInputMode
这在我创建的WriteToSheet Sub中对我来说绝对正常,但添加下一行:ActiveSheet.Range(rRng).BorderAround xlContinuous
将无法正常工作。出于好奇,我将xl0.ActiveSheet.Range("A:AS").Columns.AutoFit
添加到了Write Sub,它也自动完成了AutoFits。我绕圈子走了!
这是整个Sub,其他任何需要请告诉我!非常感谢。
Sub OutlineCells()
Dim xl0 As New Excel.Application
Dim xlw As New Excel.Workbook
Dim rRng As Range
Dim row As Range
Dim cell As Range
Set xlw = xl0.Workbooks.Open(Application.ThisWorkbook.Path & "\Outputs\MasterCardTestCaseTemplate.xlsx")
xlw.Worksheets("Sheet1").Activate
Set rRng = Sheet1.Range("A1:AS25")
'Clear existing
'rRng.Borders.LineStyle = xlNone
For Each row In rRng.Rows
For Each cell In row.Cells
'Apply new borders
xlw.ActiveSheet.Range(rRng).BorderAround xlContinuous ' <--- ERROR HERE
xlw.ActiveSheet.Range(rRng).Borders(xlInsideHorizontal).LineStyle = xlContinuous
xlw.ActiveSheet.Range(rRng).Borders(xlInsideVertical).LineStyle = xlContinuous
Next cell
Next row
xlw.Save
xlw.Close
Set xl0 = Nothing
Set xlw = Nothing
End Sub
答案 0 :(得分:3)
你正在使用你的范围对象 - 你在括号中有它导致评估,并且由于范围对象的默认属性是.Value
,这一行:
xl0.ActiveSheet.Range(rRng).BorderAround xlContinuous
基本上是这样的:
xl0.ActiveSheet.Range(rRng.Value).BorderAround xlContinuous
如果rRng
表示单个单元格并且该单元格的.Value
是有效的地址字符串,则不会引发错误。
现在,您可以执行此操作以强制.Address
属性:
xl0.ActiveSheet.Range(rRng.Address).BorderAround xlContinuous
但最好让rRng
成为xlW
工作簿的一部分。 更改此,以使其符合xlw
工作簿:
Set rRng = xlw.ActiveSheet.Range("A1:AS25")
然后您可以直接使用该范围:
For Each row In rRng.Rows
For Each cell In row.Cells
'Apply new borders
rRng.BorderAround xlContinuous ' <--- ERROR HERE
rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
rRng.Borders(xlInsideVertical).LineStyle = xlContinuous
Next cell
Next row
现在我看一下,你根本不需要那个嵌套循环,只省略两个For Each
循环,我认为这应该做同样的结果:
'## DELETE THIS For Each row In rRng.Rows
'## DELETE THIS For Each cell In row.Cells
'Apply new borders
rRng.BorderAround xlContinuous ' <--- ERROR HERE
rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
rRng.Borders(xlInsideVertical).LineStyle = xlContinuous
'## DELETE THIS Next cell
'## DELETE THIS Next row