2017-04-21 7 views
0

ボタンをクリックした後にテーブル(ListObject)を作成するためにExcelでVBAコードを実行しています。 列は、ヘッダー名のコレクションを使用して動的に追加されます。 テーブルを作成する前に、既存のテーブルが削除され、エラーが発生しないようにします。Excel VBA:ワークシートに列を追加することなくListObjectに列を追加する

ListColums.Addを使用する際の問題は、シート全体に列を追加し、既存の列を右に押すことです。したがって、ボタンをクリックするたびに、シートにはより多くの列が表示されます。これはあまりきれいではありません。ボタンは非常に頻繁に押されるので、Excelワークシートの限界を押さえたくありません。次のように私のビルド機能が動作します。

Function buildTable(wsName As String, tblName As String, clmns As Collection, Optional tableRange As String) 

    ' * If Range is not specified choose "$A$1" 
    If IsMissing(tableRange) Then 
     position = "$A$1" 
    End If 

    ' * Build the table based on the passed parameters 
    ThisWorkbook.Worksheets(wsName).ListObjects.Add(xlSrcRange, ThisWorkbook.Worksheets(wsName).Range(tableRange), , xlYes).Name = tblName 

    ' * Declare and define tblName as ListObject in Worksheet wsName 
    Dim tbl As ListObject 
    Set tbl = ThisWorkbook.Worksheets(wsName).ListObjects(tblName) 

    ' * Declare and define the columns of table tblName 
    Dim clmn As ListColumns 
    Set clmn = tbl.ListColumns 

    ' * Replace the first column name with the first item in our column Collection clmns 
    tbl.HeaderRowRange(1, 1).Value = clmns.Item(1) 

    ' * Now loop through the rest of the passed header name collection clmns. Start with 2, because 1 was already set in the last step 
    X = 2 

    For X = 2 To clmns.Count 
     ' * Add Item X to the table (String from the passed collection clmns) as column. 
     clmn.Add.Name = clmns(X) 
    Next X 

End Function 

私はこのようにそれを呼ぶことにします:

' * Declare and fill my Collection of headers 
Dim clHeaders As New Collection 
clHeaders.Add "MyFirstColumn" 
clHeaders.Add "MySecondColumn" 
clHeaders.Add "MyThirdColumn" 

' * Call the builTable Function 
Call buildTable("Sheet1", "MyTable", clHeaders) 

私はすでにThisWorkbook.Worksheets("Sheet1").Columns("AS").EntireColumn.Deleteを試してみましたが、これは、すでに空の列を空にし、それらを削除しません。.. 。

ボタンをクリックするたびにシートの最後に列が増えることなくこれを行う方法はありますか?

+0

まず、シート内の列の数を増やすことはできません。常に同じままです。次に、 'EntireColumn.Delete'は、セルの列全体を削除しますが、以前と同じように、列の総数は常に同じになります。 – Rory

+0

ありがとう、あなたは私を正しい考えに導いた! – 30000MONKEYS

答えて

0

オクラホマ、ポイントがあった。

追加された列はありませんが、ビュースペースは拡大し続けます(スクロールバーが縮小します)。

だから私がしなければならなかったすべては、私がhere

感謝を見つけThisWorkbook.Worksheets(wsName).UsedRange.SpecialCells (xlCellTypeLastCell)です!

関連する問題