차트의 텍스트 상자에서 텍스트 변경 (Microsoft Excel)
Don은 통합 문서에 여러 차트가 있습니다. 각 차트에는 현재 데이터의 날짜와 차트가 업데이트 된 날짜가있는 두 개의 텍스트 상자가 있습니다. 매크로를 사용하여 이러한 차트 텍스트 상자의 모든 텍스트를 변경하고 싶지만 작업을 수행하는 적절한 기술을 모릅니다.
물론 이것은 매크로를 사용하여 수행 할 수 있지만 매크로없이 수행 할 수있는 방법이 있음을 이해해야합니다. 원하는 경우 텍스트 상자에 표시된 내용을 셀의 내용에 연결할 수 있습니다. 즉, 각 텍스트 상자를 “동적”으로 만들 수 있으므로 연결된 셀의 내용을 변경하기 만하면됩니다. 이 셀에는 텍스트 값, 숫자 값, 날짜 또는 수식이 포함될 수 있지만 실제로는 중요하지 않습니다.
이 기술을 달성하는 방법은 다음과 같습니다. 셀을 한 번 클릭하여 셀과 연결하려는 텍스트 상자를 선택합니다. 익숙한 핸들이 텍스트 상자 바깥쪽에 나타나야합니다. 그런 다음 수식 입력 줄에 셀 참조를 입력합니다. 다음과 같이 입력하여이를 수행 할 수 있습니다.
=$C$15
이렇게하면 텍스트 상자의 내용이 C15 셀의 내용과 연결됩니다. 원하는 경우 수식 표시 줄에있는 항목을 삭제하고 수식 표시 줄이 활성화 된 상태에서 연결하려는 셀을 클릭 할 수도 있습니다. 셀 주소가 수식 입력 줄에 나타나야합니다. Enter 키를 누르면 작업이 완료됩니다.
이제 연관된 셀에 무언가를 입력하십시오. 입력 한 내용이 텍스트 상자에 즉시 표시되어야합니다.
잠재적 인 매크로 관련 답변을 제공하기 전에 VBA를 통해 액세스 할 수있는 Excel의 개체 모델에 대한 약간의 배경 지식이 필요합니다.
통합 문서에 포함 할 수있는 차트에는 차트 시트와 포함 된 차트의 두 가지 유형이 있습니다. 차트 시트는 Chart 개체로 표시되며 Charts 컬렉션에 속합니다. 반면에 포함 된 차트는 ChartObjects 컬렉션에 속하는 Chart 개체로 표시되며, 이는 차례로 워크 시트 개체에 속합니다.
실제 차트 시트에 텍스트 상자를 배치하면 다음과 같은 방식으로 액세스 할 수 있습니다.
Sub FindTextBoxes1() Dim c As Chart Dim s As Shape Dim sMsg As String Dim sName As String For Each c In ActiveWorkbook.Charts For Each s In c.Shapes If s.Type = msoTextBox Then sMsg = s.TextFrame2.TextRange.Text sName = s.Name MsgBox "Text: " & sMsg, vbOKOnly, sName End If Next s Next c End Sub
이 매크로는 각 차트 시트와 각 차트 시트의 각 텍스트 상자를 차례로 살펴 봅니다. 그러면 각 텍스트 상자에있는 내용이 메시지 상자에 표시됩니다. 메시지 상자에 포함 된 내용을 변경하려면 TextRange 개체의 Text 속성을 설정하기 만하면됩니다.
포함 된 차트의 텍스트 상자는 다른 이야기입니다. 왜? 텍스트 상자가 실제로 차트의 일부가 아니라 워크 시트의 일부일 수 있기 때문입니다. 즉, 텍스트 상자의 “부모”는 포함 된 차트이거나 워크 시트 일 수 있습니다.
텍스트 상자가 포함 된 차트의 일부인지 확인하는 좋은 방법은 방금 제시된 것과 유사한 매크로를 만드는 것입니다. 그러나이 차트는 각 워크 시트에 포함 된 각 차트를 단계별로 살펴보고 해당 차트 내에서 각 셰이프 (텍스트 상자)를 찾을 수 있습니다.
Sub FindTextBoxes2() Dim w As Worksheet Dim c As ChartObject Dim s As Shape Dim sMsg As String Dim sName As String For Each w In ActiveWorkbook.Worksheets For Each c In w.ChartObjects For Each s In c.Chart.Shapes If s.Type = msoTextBox Then sMsg = "This text box is a child of the " sMsg = sMsg & "embedded chart" & vbCrLf sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text sName = s.Name MsgBox sMsg, vbOKOnly, sName End If Next s Next c For Each s In w.Shapes If s.Type = msoTextBox Then sMsg = "This text box is a child of the " sMsg = sMsg & "worksheet" & vbCrLf sMsg = sMsg & "Text: " & s.TextFrame2.TextRange.Text sName = s.Name MsgBox sMsg, vbOKOnly, sName End If Next s Next w End Sub
매크로를 실행하면 실제로 포함 된 차트의 자식 인 각 텍스트 상자에 대한 메시지 상자가 표시됩니다. 그런 다음 워크 시트의 자식 인 텍스트 상자에 대한 메시지 상자가 표시됩니다. 이전 매크로에서와 같이 이것은 Shape 객체에 대한 정보를 표시하기 전에 실제로 텍스트 상자인지 확인합니다. 시트에 포함 된 차트도 Shapes 컬렉션의 일부로 간주되기 때문에 워크 시트의 각 셰이프를 단계별로 실행할 때 특히 중요합니다.
이전과 마찬가지로 텍스트 상자에 포함 된 텍스트를 변경하려면 TextRange 개체의 Text 속성을 변경하기 만하면됩니다.
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (13377)은 Microsoft Excel 2007, 2010 및 2013에 적용됩니다.