找不到运行时错误1004

时间:2012-12-06 18:34:42

标签: vba excel-vba excel

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

2 个答案:

答案 0 :(得分:6)

对我来说,它实际上是下一行.Range(myrange).Select的错误。你已经定义了myrange,你实际上不需要,也不需要它。

此外,Dim x, y As Integer仅将y声明为Integerx被声明为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()。激活并使用你的代码...但我不是一个大粉丝。