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에 적용됩니다.