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 に答える