2017-09-29 17 views
0

私はこれを最も長く執着していましたが、これはおそらく私が見ていない簡単な修正です。私はテーブルの最後の行を選択し、最後の列までそれを囲む枠線を作成しようとしています。 "POS"は私が働いているワークシートの名前です。 "BRangePOS"は私がこれがテーブルの始まりであると言っています。VBAで最後の行と列を選択しようとしています

ここに私のコードです。

Set BRangePOS = POS.Range("A1") 
    With BRangePOS 
     With POS 
      lrowPOS = .Cells(.Rows.Count, 1).End(xlUp).Row 
      lcolPOS = .Cells(1, Columns.Count).End(xlToLeft).Column 
     End With 
    End With 

    POS.Range(lrowPOS, lcolPOS).BorderAround Weight:=xlMedium 

私が手にエラーがすべてのヘルプは素晴らしいことだ

「をObject_'Worksheetのメソッド 『範囲は』」失敗しました」です。

おかげで、

G

+1

範囲エリアはなく、[チュートリアル]で単一細胞 – SeanC

+0

ルック(https://www.excelcampus.com/する必要がある:次のコードは、テーブルの最後の行がBRangePOS始まる選択しますvba/find-last-row-column-cell /)を使用し、.Findメソッドを使用します。理解しやすくするための画像があります。または他の方法を使用するが、最後の行/列/セルについてもっと知るために読む – danieltakeshi

+0

境界線を必要とするのは最後の行だけですか?つまり、テーブル全体ではありませんか?これはピボットテーブルです。なぜ既存のPivot Table Stylesの1つを適用するだけではなく、Pivo​​tLight28は最後の行の周りに境界線を持っています。他の面白いスタイルがあるかもしれません。 –

答えて

0

をneeeded場合は、テーブルの最後の行の周囲に境界線を作成するには、列のための機能を追加し

lastRow = findLastRow("Sheet1", "A:A") ' Or "A:X" 

Function findLastRow(Sheetname As String, ColumnName As String) As Integer 
    Dim lastRow As Integer 
    Dim r As Range 
    Dim WS As Worksheet 

    Set WS = Worksheets(Sheetname) 
    lastRow = WS.UsedRange.Rows.Count 
    '* 
    '* Search backwards till we find a cell that is not empty 
    '* 
    Set r = WS.Range(ColumnName).Rows(lastRow) 
    While IsEmpty(r) 
     Set r = r.Offset(-1, 0) 
    Wend 
    lastRow = r.Row 
    Set WS = Nothing 
    findLastRow = lastRow 
End Function 

:最後の行を検索するに

Dim POS As Worksheet 
Dim BRangePOS As Range 
Dim LastRow, LastCol As Integer 
Dim ColStart, RowStart As Integer 

Set POS = ThisWorkbook.Sheets("POS")   ' Working sheet 

' ------- Where the table starts - to input [xx] ------- 
Set BRangePOS = POS.[a1]        '| 
' ------------------------------------------------------ 

ColStart = BRangePOS.Column      ' Column start 
RowStart = BRangePOS.Row      ' Row Start 
LastRow = BRangePOS.CurrentRegion.Rows.Count ' Number of rows 
LastCol = BRangePOS.CurrentRegion.Columns.Count ' Number of columns 

POS.Range(Cells(LastRow + RowStart - 1, BRangePOS.Column), _ 
    Cells(LastRow + RowStart - 1, LastCol + ColStart - 1)). _ 
    BorderAround Weight:=xlMedium 

が、これは

0

は、以下試してください:

Sub test() 


Set BRangePOS = POS.Range("A1") 

     With POS 
      lrowPOS = .Cells(.Rows.Count, 1).End(xlUp).Row 
      lcolPOS = .Cells(1, Columns.Count).End(xlToLeft).Column 
     End With 

    POS.Range(Cells(1, 1), Cells(lrowPOS, lcolPOS)).BorderAround Weight:=xlMedium 

End Sub 

enter image description here

+0

申し訳ありませんが、動作しませんでした。エラーメッセージは表示されませんでしたが、最後の行の周りに境界線がありません。これはピボットテーブルであることに言及する価値はありますか? – GCC

0

をたぶん、あなたはここからいくつかのアイデアを得ることができます。

+0

暗黙の参照を避ける(Set WSのワークブック)。レンジオブジェクトを引数として渡すのはなぜですか? – BitAccesser

+0

はい、もちろん可能です。 – peakpeak

0

を役に立てば幸い<range>.End()を使用することもできます。これらのテーブルは、テーブルに1列または1行しかないエッジの場合にも役立ちます。

Dim startOfLastRow As Range 
Set startOfLastRow = BRangePOS.End(xlDown).End(xlDown).End(xlUp) 

With Range(startOfLastRow, startOfLastRow.End(xlToRight).End(xlToRight).End(xlToLeft)) 
    'Insert code to apply border here 
End With 
関連する問題