2013-10-21 2 views
1

VBA에 새로운 기능입니다. 난 상수 텍스트를 일부 상수 세포를 채우는 함수를 작성하려고합니다. 내 부에서이 함수를 호출하고있어텍스트를 채우는 기능이 종료되면 VBA 텍스트가 사라집니다.

Public Function PrepareSpreadSheet() 
    Range("B5").Select 
    ActiveCell.FormulaR1C1 = "Sun" 
    Range("C5").Select 
    ActiveCell.FormulaR1C1 = "Mon" 
    Range("D5").Select 
    ActiveCell.FormulaR1C1 = "Tue" 
    Range("J5").Select 
    ActiveCell.FormulaR1C1 = "Total" 
    Range("B5:J5").Select 
    With Selection 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     .WrapText = False 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 
End Function 

: 나는 실행하면

Sub ReadTxtFile() 
    PrepareSpreadSheet 
End Sub 

이 아무 일도 발생하지 이건 내 코드입니다. 디버깅 할 때 텍스트가 지정된 셀에 입력 된 것을 볼 수 있지만 함수가 끝나면 사라집니다.

해결 방법을 설명해 주시겠습니까?

감사합니다, 리

+0

이 기능은 예상대로 작동합니다. 개선 될 수 있지만 (Sid의 답변 참조), 어떤 일이 일어나고 있다고 생각되는 것은 어떤 시점에서'Application.ScreenUpdating = false'를 해제하고 함수가 실행될 때 화면이 업데이트되지 않았다는 것입니다. 코드를 검사하고'Application.ScreenUpdating = False'를 찾거나 단순히'ReadTxtFile' 서브 안에'PrepareSpreadSheet' 호출 후에'Application.ScreenUpdating = True'를 추가하십시오 –

+2

은'Exit Sub' 오타입니다? 'End Sub'가되어서는 안 될까요? –

+0

@mehow : 좋은 지적 –

답변

2

이유는 기능이 아닌 하위? 함수는 Return에 사용됩니다. 또한 .Select을 사용하지 마십시오.

INTERESTING READ

이것은 당신이 무엇을하려고합니까?

Sub ReadTxtFile() 
    PrepareSpreadSheet 
End Sub 

Public Sub PrepareSpreadSheet() 
    Dim ws As Worksheet 

    '~~> Change this to the relevant worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     .Range("B5").Value = "Sun" 
     .Range("C5").Value = "Mon" 
     .Range("D5").Value = "Tue" 
     .Range("J5").Value = "Total" 

     With .Range("B5:J5") 
      .HorizontalAlignment = xlCenter 
      .VerticalAlignment = xlCenter 
      .ReadingOrder = xlContext 
     End With 
    End With 
End Sub 

위는 여전히 세포 삭제 될 수있는 worksheet_Change 이벤트에 코드가있는 경우

  1. 확인 후, 작동하지 않는 경우?
  2. 해당 셀의 글꼴 색이 흰색이 아닌지 확인하십시오.
  3. 올바른 워크 시트를 검사하고 있는지 확인하십시오. 데이터가 다른 워크 시트에있을 수 있습니까?
  4. courtesy @Mehow : Application.ScreenUpdating = false으로 설정하면 데이터가 표시되지 않을 수도 있습니다. 이벤트를 False으로 설정하는 경우 True
+2

모든 수정 사항이 훌륭합니다 (OP의 코드에는 몇 가지 약점이 있습니다).하지만이 모든 것이 참조 된 문제를 해결할 수 있다고 생각하지 않습니다. OP가 주장하는 바 (디버그 작업은하지만 스프레드 시트를 실행할 때가 아니라)는이 방법이 관련 이벤트 (예 : 버튼 클릭)와 연결되지 않은 것처럼 들립니다. – varocarbas

+0

@mehow : 이미 1 절에서 언급했습니다. –

관련 문제