2014-02-10 5 views
1

단락이 포함 된 TextBox 1이라는 텍스트 상자가 있습니다. profile_reference이라는 이름 (Insert > Name > Define...)으로 정의했습니다.텍스트 상자의 값을 셀로 가져 오기

셀에 수식 =profile_reference을 입력했지만 값이 TextBox 1입니다. 내가 원했던 것은 그 텍스트 박스의 실제 가치를 얻는 것입니다. 그게 가능하니?

PHP 파서를 사용하여이 Excel 파일에서 값을 가져오고 텍스트 상자의 값을 가져올 수 없으며 셀 값만 가져올 수 있습니다. 그래서 그 텍스트 상자의 값을 셀에 복사 한 다음 구문 분석하려고합니다.

답변

6

텍스트 상자의 내용을 검색 할 수는 있지만 표준 Excel 사용자 인터페이스 이상을 필요로합니다.

텍스트 상자는 Shape 개체이고 워크 시트의 Shapes 컬렉션의 멤버입니다. 텍스트 상자를 워크 시트에 삽입하면 Excel은 "TextBox 1"과 같은 이름을 제공합니다. Shape 객체가 몇 개체, 속성 (예 : 그림이나 도형 등) 여러 가지의 다양한 포함 할 수 있기 때문에 따라서

Worksheets("Sheet1").Shapes("TextBox 1") 

(예를 들어)로 VBA에서 텍스트 상자를 포함하는 Shape 객체를 참조 할 수 있습니다 메소드는 텍스트 검색과 관련됩니다. 필요한 전체 문구는

Worksheets("Sheet1").Shapes("TextBox 1").TextFrame.Characters.Text 

입니다. 텍스트 상자의 내용을 문자열로 전달합니다.

그러나 Excel에서 지정한 텍스트 상자의 이름 (예 : '텍스트 상자 1')을 사용해야합니다. TextBox 1을 참조하는 "profile_reference"라는 이름을 추가 했으므로 Excel에서 작성한 이름이 아닌 이름을 사용하여 텍스트 상자의 내용을 얻는 방법은 무엇입니까?

이름은 통합 문서 이름 컬렉션의 일부인 Name 개체입니다. 그래서 당신은

ActiveWorkbook.Names("profile_reference") 

(예를 들어)로 특정 이름의 객체를 참조 할 수 있으며 "는 의미로"객체 (사용자 인터페이스를 사용하여 지정한 비트)의 부분은

ActiveWorkbook.Names("profile_reference").Value 

Name 객체의 값 속성은 작은 따옴표 안에있는 비트 즉, 귀하의 경우이 문자열은

'="TextBox 1"' 

있도록 Excel의 수식 구문의 문자열입니다. 이것은 거의 'TextBox 1'문자열이 아닙니다.

Dim strTB As String 
strTB = ActiveWorkbook.Names("profile_reference").Value 
strTB = Mid(strTB, 3, Len(strTB) - 3) 'Strips unwanted =" and " chars from start/end 
MsgBox Worksheets("Sheet1").Shapes(strTB).TextFrame.Characters.Text 

내가 텍스트 상자의 내용을 표시하는 메시지 상자를 사용했습니다 : 따라서, 당신의 이름을 사용하여 텍스트 상자의 내용을 얻는 것은 같은 VBA 조금 필요합니다. 내용을 워크 시트 셀에 똑같이 할당 할 수 있습니다. 원하신다면 텍스트 상자의 내용을 워크 시트 셀에 넣을 수있는 편리한 메커니즘을 제공하는 짧은 사용자 정의 함수 (아마도 사용자의 이름을 입력 인수로 사용하는)에서이를 마무리 할 수 ​​있습니다.

+0

늦게 회신 해 주셔서 죄송합니다. VBA에 대한 지식은 없지만 위에 나온 코드 제안을 얻기 위해 오늘 기본 사항을 배웠습니다. 당신의 대답은 내가 찾고있는 것입니다, 나는 그것을 작동 시켰습니다 - 셀에 인쇄 된 텍스트 상자의 가치. 정말 고마워! – kevinandrada

+0

@DMM 나는 이것이 낡은 질문 인 것을 안다. 그러나 나는 똑같은 것을 알 필요가 있었기 때문에 오늘 그것을 가로 질러 간다. 그러나 Worksheet ("Sheet1"). Shapes ("TextBox 1"). TextFrame.Characters.Text'는 TextBox에 텍스트가 상당히있는 경우 제한적인 것으로 보입니다. 전체 문자열을 반환하지 않습니다. 'Worksheets ("Sheet1")을 사용할 때 셰이프 ("TextBox 1"). TextFrame.Characters.Text = "blah blah blah"', 텍스트를 다시 설정하려면 대다수를 사용하고 "blah blah blah "하지만 나머지 텍스트는 여전히 textBox에 있습니다. 이게 제한되었거나 뭔가 빠졌습니까? – Mike

관련 문제