VBA를 사용하여 Excel의 표를 참조하려면 어떻게 해야 합니까?
Excel VBA에서 명명된 테이블을 참조할 수 있습니까?
이건 아마도...
Sheets("Sheet1").Table("A_Table").Select
테이블이 리스트 오브젝트라는 것은 몇 가지 언급이 있습니다만, 그것이 같은 것인지 아닌지는 잘 모르겠습니다.
OP는 표를 추가하는 방법이 아니라 표를 참조할 수 있는지 묻습니다.즉, 작업량은
Sheets("Sheet1").Table("A_Table").Select
다음과 같은 문장이 될 수 있습니다.
Sheets("Sheet1").ListObjects("A_Table").Range.Select
또는 (테이블의 데이터처럼) 부품을 선택하려면:
Dim LO As ListObject
Set LO = Sheets("Sheet1").ListObjects("A_Table")
LO.HeaderRowRange.Select ' Select just header row
LO.DataBodyRange.Select ' Select just data cells
LO.TotalsRowRange.Select ' Select just totals row
부품의 경우 머리글과 총 행의 존재 여부를 테스트한 후 선택할 수 있습니다.
VBA의 SO 표 참조에 관한 질문은 이것뿐입니까?Excel의 테이블은 일리가 있지만 VBA에서 작업하는 것은 매우 어렵습니다.
Excel의 "테이블"은 실제로 ListObject로 알려져 있습니다.
테이블을 참조하는 "적절한" 방법은 워크시트에서 ListObject를 가져오는 것입니다. SheetObject.ListObjects(ListObjectName)
.
시트를 사용하지 않고 표를 참조하려면 해킹을 사용할 수 있습니다.Application.Range(ListObjectName).ListObject
.
메모: 이 해킹은 Excel이 항상 테이블과 동일한 이름으로 테이블의 DataBodyRange에 대해 명명된 범위를 생성한다는 사실에 의존합니다.그러나 이 범위 이름은 변경할 수 있습니다.테이블 이름을 편집하면 이름이 리셋되기 때문에 하고 싶은 일은 아니지만!또한 연관된 ListObject가 없는 이름 있는 범위를 얻을 수도 있습니다.
이름을 틀렸을 때 Excel의 별로 도움이 되지 않는 1004 에러 메세지가 표시되므로, 래퍼를 작성할 필요가 있습니다.
Public Function GetListObject(ByVal ListObjectName As String, Optional ParentWorksheet As Worksheet = Nothing) As Excel.ListObject
On Error Resume Next
If (Not ParentWorksheet Is Nothing) Then
Set GetListObject = ParentWorksheet.ListObjects(ListObjectName)
Else
Set GetListObject = Application.Range(ListObjectName).ListObject
End If
On Error GoTo 0 'Or your error handler
If (Not GetListObject Is Nothing) Then
'Success
ElseIf (Not ParentWorksheet Is Nothing) Then
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found on sheet '" & ParentWorksheet.Name & "'!")
Else
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found!")
End If
End Function
List Object에 대한 유용한 정보도 여기에 있습니다.
또, 오브젝트를 참조해 변수를 정의하는 것도 편리합니다.예를 들어.
Sub CreateTable()
Dim lo as ListObject
Set lo = ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes)
lo.Name = "Table1"
lo.TableStyle = "TableStyleLight2"
...
End Sub
당신은 곧 그것이 유리하다는 것을 알게 될 것이다.
위와 더불어 다음을 수행할 수 있습니다(여기서 "YourListObjectName"은 테이블의 이름입니다).
Dim LO As ListObject
Set LO = ActiveSheet.ListObjects("YourListObjectName")
그러나 활성 시트에 있는 목록 개체를 참조하려는 경우에만 사용할 수 있습니다.
다른 워크시트의 피벗 테이블이 참조하는 한 워크시트의 목록 개체(표)를 참조하려고 질문을 찾았습니다.리스트 객체는 워크시트 집합의 일부이므로 리스트 객체가 있는 워크시트의 이름을 알아야 참조할 수 있습니다.리스트 오브젝트가 있는 워크시트의 이름을 취득하기 위해 피벗 테이블의 소스 리스트 오브젝트(테이블)의 이름을 취득하여 찾고 있는 리스트 오브젝트를 포함한 워크시트를 찾을 때까지 워크시트와 리스트 오브젝트를 루프합니다.
Public Sub GetListObjectWorksheet()
' Get the name of the worksheet that contains the data
' that is the pivot table's source data.
Dim WB As Workbook
Set WB = ActiveWorkbook
' Create a PivotTable object and set it to be
' the pivot table in the active cell:
Dim PT As PivotTable
Set PT = ActiveCell.PivotTable
Dim LO As ListObject
Dim LOWS As Worksheet
' Loop through the worksheets and each worksheet's list objects
' to find the name of the worksheet that contains the list object
' that the pivot table uses as its source data:
Dim WS As Worksheet
For Each WS In WB.Worksheets
' Loop through the ListObjects in each workshet:
For Each LO In WS.ListObjects
' If the ListObject's name is the name of the pivot table's soure data,
' set the LOWS to be the worksheet that contains the list object:
If LO.Name = PT.SourceData Then
Set LOWS = WB.Worksheets(LO.Parent.Name)
End If
Next LO
Next WS
Debug.Print LOWS.Name
End Sub
어쩌면 누군가 더 직접적인 방법을 알고 있을지도 몰라.
Sub CreateTable() ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes).Name = _ "Table1" 'No go in 2003 ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" End Sub
세 번째 옵션 추가@AndrewD의 두 번째 옵션의 "shorthand" 버전입니다.
- Sheet Object(시트 객체)List Objects("Table Name")
- 어플.범위("TableName")리스트 오브젝트
- [테이블명]리스트 오브젝트
네, 괄호 참조에는 따옴표가 없습니다.
언급URL : https://stackoverflow.com/questions/18030637/how-do-i-reference-tables-in-excel-using-vba
'programing' 카테고리의 다른 글
UIImage를 90도 회전시키는 방법 (0) | 2023.04.12 |
---|---|
작성자와 날짜를 포함하는 git 로그에서 가능한 가장 짧은 출력 (0) | 2023.04.12 |
UILabel - 텍스트에 맞게 레이블 크기를 자동 조정하시겠습니까? (0) | 2023.04.12 |
Common Table Expression(CTE; 공통 테이블 표현)을 사용하는 경우 (0) | 2023.04.07 |
데이터베이스의 모든 사용자에 대한 모든 권한/액세스를 찾기 위한 SQL Server 쿼리 (0) | 2023.04.07 |