0

我认为这是一个非常简单的代码,旨在为工作表中的所有活动单元格设置边框(数据将始终驻留在单元格(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
4

2 回答 2

6

对我来说,它实际上在下一行出错.Range(myrange).Select。您已经定义了 myrange,您不需要,事实上也不能,限定它。

此外,Dim x, y As Integer, 仅声明yInteger. 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
于 2012-12-06T18:54:16.700 回答
0

这有点像在黑暗中拍摄,但我认为您可能想尝试定义一个精确的工作表以在您的 With 语句中使用。

Dim mySheet as WorkSheet
Set mySheet = ActiveWorkbook.Sheets(<name of your sheet>)
[etc etc]

有时 VBA 很难弄清楚活动工作表是什么。我倾向于使用这个解决方案,因为它是硬编码而不是使用相对变量。我认为你可以简单地放置像 Sheets().Activate 和使用你的代码这样的东西......但我不是一个大粉丝。

于 2012-12-06T18:50:55.567 回答