我认为这是一个非常简单的代码,用于在工作表中放置所有活动单元格的边框(数据将始终驻留在单元格(1,1)中)。但是我得到了臭名昭着的“运行时错误1004”,我很难过。
任何帮助都将不胜感激。
Sub test()
Dim myrange As Range
Dim x, y As Integer
x = ActiveSheet.Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row
MsgBox x
'------------------------------'
y = ActiveSheet.Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column
MsgBox y
Set myrange = ActiveSheet.Range(Cells(1, 1), Cells(x, y))
With ActiveSheet '<-- erroring here'
.Range(myrange).Select
With Selection.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End With
End Sub
答案 0 :(得分:6)
对我来说,它实际上是下一行.Range(myrange).Select
的错误。你已经定义了myrange,你实际上不需要,也不需要它。
此外,Dim x, y As Integer
仅将y
声明为Integer
。 x
被声明为Variant
。当你在它时,你应该将它们声明为Longs
,这是本机VBA类型。
此外,除非必要,否则请避免使用Select
。总而言之,这就是我编码的方式:
Sub test()
Dim myrange As Range
Dim x As Long, y As Long
x = ActiveSheet.Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row
y = ActiveSheet.Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column
Set myrange = ActiveSheet.Range(Cells(1, 1), Cells(x, y))
With myrange.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
答案 1 :(得分:0)
在黑暗中这是一个镜头,但我想你可能想尝试在你的With语句中定义一个确切的表格。
Dim mySheet as WorkSheet
Set mySheet = ActiveWorkbook.Sheets(<name of your sheet>)
[etc etc]
有时VBA很难弄清楚活动表是什么。我倾向于使用此解决方案,因为它使用硬编码而不是使用相对变量。我理论上你可以简单地写一些像Sheets()。激活并使用你的代码...但我不是一个大粉丝。