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 |