테이블 Excel VBA에 새 열 삽입
제가 만들고 있는 워크시트에 몇 가지 문제가 있습니다.표의 특정 위치에 열을 삽입한 후 헤더를 설정하고자 합니다.
잠시 검색해보니 다음과 같은 코드가 있었습니다.
ActiveSheet.Columns(2).Insert
이것은 열을 삽입하는 데 효과가 있지만, 이 후에 표의 머리글을 어떻게 변경해야 할지 잘 모르겠습니다.
또한 저는 이전에 테이블 끝에 열을 추가하고 이름을 짓는 것에 대해 여기서 조언을 받았습니다.
코드는 다음과 같습니다.
Dim oSh As Worksheet
Set oSh = ActiveSheet
Dim oLc As ListColumn
Set oLc = oSh.ListObjects("PropTable").ListColumns.Add
oLc.Name = "XYZ"
이 두 가지 방법을 다양하게 조합해 보았지만 운이 따르지 않습니다.단순히 열을 추가하는 것이 아니라 특정 위치에 열을 삽입하도록 코드의 두 번째 블록을 수정하는 방법은 없습니까?
감사해요.
-션
특정 위치의 테이블에 열을 추가하고 동일한 코드 라인을 사용하여 이름을 지정할 수 있습니다.
Table.ListColumns.Add(2).Name = "New Header"
이렇게 하면 테이블의 두 번째 열의 왼쪽에 열이 추가되고 새 헤더로 이름이 붙여집니다.이름을 알고 있는 열의 왼쪽에 열을 추가하여 코드를 동적으로 만들 수 있습니다.이렇게 하면 새 열의 고정 위치 정수 값을 지정할 필요가 없습니다.
Dim newColNum as Integer
newColNum = Range("Table[Column Name]").Column
Table.ListColumns.Add(newColNum).Name = "New Header"
[Column Name]은 새 열을 삽입할 테이블의 열 이름입니다.테이블에서 임의의 위치를 가질 수 있으며, 해당 값을 정수로 Add에 전달할 수 있습니다.
Dim Table As ListObject
Set Table = Sheet1.ListObjects("Table1")
Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "New header"
스레드가 오래된 것은 알지만, 여기서 가장 많은 지지를 받은 답변은 위험하고 심각한 문제에 빠질 수 있다는 점을 지적해야 합니다.엑셀 버전에 따라 다른지 모르겠네요 - 저는 엑셀'16을 사용합니다.
col A, col B 및 col C 열을 포함하는 표를 생각해 보겠습니다.
우리는 "The Dudes" 원-라이너 코드를 사용하며 새 칼럼의 이름을 "Col B"로 지으려고 합니다.이미 존재하지만 어떻게 되는지 확인합니다.
Sub theDude()
Dim Table As ListObject
Set Table = ActiveSheet.ListObjects(1)
With Table
' adding column on the second place
' and trying to force its header to "Col B"
.ListColumns.Add(2).Name = "Col B"
'fill "Col B" with value
.ListColumns("Col B").DataBodyRange = "test"
End With
End Sub
우리가 얻은 것은?결과적으로 4개의 열이 있습니다.
- 칼라
- 새로 삽입된 열 1 또는 테이블 열의 다른 DEFAULT NAME (1)
- Col B - "test" 문자열로 채워진 "이전" B 열
- 콜씨
(1) 언어 버전에 따라 다릅니다. 저의 이름은 콜룸나1이고 엑셀에서 자동으로 제공합니다.
가장 나쁜 것은 매크로 실행 후 B 콜의 데이터가 손실된다는 것입니다.따라서 대신 한 줄기(방법 체인)에서 @stenci의 단계별 솔루션을 사용하거나 오류 처리를 추가하는 것이 더 좋습니다. 예:
Sub AddingColumn()
Dim Table As ListObject
' ActiveSheet just for test
Set Table = ActiveSheet.ListObjects(1)
Dim newColName As Variant ' or string / long
newColName = "Col B"
If headerExists(newColName, Table) Then
Dim tit As String: tit = "Error"
Dim txt As String
txt = "Header " & newColName & " already exists. Macro will be interrupted"
MsgBox txt, vbOKOnly, tit
Exit Sub
Else
' main code goes here *********************
With Table
' adding column on the second place
' and trying to force its header to "Col B"
.ListColumns.Add(2).Name = newColName
'fill "Col B" with value
.ListColumns("Col B").DataBodyRange = "test"
End With
End If
End Sub
Function headerExists(ByVal findHeader As String, ByVal tbl As ListObject) As Boolean
Dim pos As Variant ' position
pos = Application.Match(findHeader, tbl.HeaderRowRange, 0)
headerExists = Not IsError(pos)
End Function
언급URL : https://stackoverflow.com/questions/17549885/insert-new-column-in-table-excel-vba
'sourcecode' 카테고리의 다른 글
jQuery를 사용하여 대상 요소에서 클릭 좌표를 가져오는 방법 (0) | 2023.10.20 |
---|---|
상쇄간의 차이높이 및 고객높이 (0) | 2023.10.20 |
PowerShell에서 EXE 출력 캡처 (0) | 2023.10.20 |
따옴표가 있는 URL을 표시하는 입력 필드 (0) | 2023.10.20 |
쉼표로 구분된 목록 MySQL에서 항목 수를 세는 방법 (0) | 2023.10.20 |