2016-09-30 3 views
0

텍스트 상자의 격자를 만들었지 만 글꼴 크기와 정렬 방법을 알아낼 수 없습니다 (세로 및 가로로 중앙 집중화). 명명 된 텍스트 상자.Excel VBA : 텍스트 상자 내에서 글꼴 크기와 맞춤을 변경하는 방법

Sub addtxtbx() 
Dim shp As Shape 
Dim i As Integer, j As Integer, k As Integer 
Dim cindx as long, rindx as long 
For i = 1 To 145 
Set shp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _ 
      100 + cindx, 100 + rindx, 50, 50) 
    cindx = (i - Int((i - 1)/4) * 4 - 1) * 50 + Int((i - 1)/48) * 200 
    rindx = (Int((i - 1)/4) - Int((i - 1)/48) * 12) * 50 
    With shp 
     .Name = "TxtBx" & (i - 1) 
     .Fill.ForeColor.RGB = RGB(204, 102, 255) 
    End With 
Next i 

With ActiveSheet.Shapes.Range(Array("TxtBx11")).TextFrame2.TextRange 
    .Characters.Text = "R" 
End With 
End Sub 

또한 For Next 루프의 i 카운터로 머리를 긁적니다. 나는 그것을 텍스트 상자의 이름을 바꾸는 데 사용하고 i = 1에서 144까지 사용했지만 TxtBx144는 마지막 상자가 아니지만 두 번째 마지막 TxtBx2가 첫 번째 상자라는 것을 알았습니다. 그래서 저는 1에서 145 사이의 값을 사용하고 상자를 (i-1) serial을 사용하여 상자에 넣으려고했습니다. 나는 무엇을 잘못해서 내가보기에 실패 했는가?

+1

* 워크 시트에 144 개의 텍스트 상자 *가 있습니까? 대신 입력을 위해 셀을 사용하는 것이 가장 좋은 이유는 무엇입니까? –

+0

@ mat'smug, 저는 현재 실제로 셀을 가지고 있으며이 셀을 그림으로 복사하고 그림을 chartobject에 붙여넣고 chartobject를 png로 저장해야합니다. 불행히도, 너무 많은 실행 후, 런타임 오류를 극복하기 위해 수면 시간을 늘려야했습니다 (David Zemens의 추천에 따라). 궁극적으로는 절전 모드로 전환 할 수 없으며 Excel을 종료 할뿐만 아니라 PC를 재부팅하여 다시 작동시켜야합니다. 텍스트 상자를 사용하여 주위를 둘러보기를 원합니다. 나는 하나의 상자를 사용하고 문자 간격을 조정할 수 있습니다 ... 지금은 실험하고 있습니다. – user110084

+0

'.Name'을'TxtBx '에'i-1'을 연결하도록 설정했기 때문에'i'가 1에서 145 사이가 될 수 있다면'i-1'은 0에서 144로갑니다. 불분명하다. –

답변

2

은 당신이하고 싶은 것은 이것이다 : 20 당신이 원하는 크기

shp.ShapeRange.TextFrame2.TextRange.Font.Size = 20 

.

왜 텍스트 상자에 번호가 잘못 매겨 졌는지 모르겠지만 작성한 코드는 실제로 1-14가 아닌 0-143을 제공하므로 일부 코드는 내가 변경하지 않았다고 의심됩니다. 질문에 넣거나 다른 일이 벌어지고있다.

또한 코드를 작성하는 방법을 알아내는 가장 쉬운 방법은 매크로를 기록하고 수행하려는 모든 작업을 수행하고 매크로를 중지 한 다음 코드를 살펴 보는 것입니다.

+0

'.Name = "TxtBx"& (i - 1)'이 0에서 143 IMO로가는 이유를 분명히합니다. ... 또는 나는 무엇인가 놓쳤 느냐? –

+0

@ Mat'sMug 나는 동의한다. 그러나 OP는 그것들을 위해 실제로 i-1과 함께 1에서 144 사이라고 진술하고있다. – OpiesDad

+0

감사합니다. @OpiesDad. 나는 매크로 레코더를 사용했지만, "With Selection.ShapeRange (1) .TextFrame2.TextRange.Characters (1, 1) .Font"을 가지고 있었기 때문에 나는 (1,1) 부분에 대해서 확신하지 못했다. 성공하지 못했습니다 – user110084