2013-07-18 2 views
0

아래 코드를 사용하여 셀의 대문자 값을 강제 적용하려고합니다. 그러나Excel VBA - 내용을 삭제할 때 대문자 오류가 발생합니다.

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
    ActiveSheet.Unprotect Password:="" 
    Target = UCase(Target) 
    Application.EnableEvents = True 
    ActiveSheet.Protect Password:="" 

, 셀의 내용이 삭제 될 때 (요구 될 수있는) 내가받을 다음과 같은 오류 "런타임 오류 '13': 형식 불일치"

당신은 어떤 빛을 흘릴 수있는 경우 이것에, 그것은 좋을 것입니다!

답변

1

저는 제 위치를 유지하고 있습니다. 원래 코드는

Target = UCase(Target) 

입니다. 이는 대상 범위 대문자를 갖고 있음을 의미합니다.

If Intersect(Target, Range("B9", "F10")) Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
    ActiveSheet.Unprotect Password:="" 
    Dim c As Range 
    For Each c In Target 
     If VarType(c.Value)=vbString Then 
      c.Value = UCase(c.Value) 
     End If 
    Next 
    Application.EnableEvents = True 
    ActiveSheet.Protect Password:="" 
+0

이 코드는 B9에서 변경 : F10을! –

+0

그건 속이는거야! : P –

+0

왜 그것이 옳은지 설명하는 나의 원래의 대답을보십시오. 속임수 죄송합니다 LS_dev :-) – Tarik

2

대상은 (당신이 Worksheet_Change 이벤트를 사용하는 가정) 레인지가 아닌 문자열입니다 제공

For Each c In Target 
    If VarType(c.Value)=vbString Then 
     c.Value = UCase(c.Value) 
    End If 
Next 

: 그것을 할 수있는 방법으로이 라인을 교체하는 것입니다.

빈 셀이 아닌 한 번에 여러 셀을 변경해야합니다.

값이이기 때문에 하나의 셀이 있으면 모두 괜찮습니다. Target으로 평가됩니다 .Value는 일반적으로 String으로 캐스팅 가능합니다. 한 번에 하나 이상의 셀을 변경하면 Target.Value가 문자열을 캐스팅 할 수없는 배열을 반환합니다.

그래서 당신은 한 번에 각 셀을 변경해야합니다 : 세포 변경됩니다

Dim cell as Range, cells as Range 
Set cells=Intersect(Target, Range("B9", "F10")) 
If cells Is Nothing Then Exit Sub 
Application.EnableEvents = False 
ActiveSheet.Unprotect Password:="" 
For each cell In cells.Cells 
    Cell.Value = UCase(cell.Value) 
Next 
Application.EnableEvents = True 
ActiveSheet.Protect Password:="" 
+0

셀 내용이 비어 있으면 폭파합니다. – Tarik

+0

내 Excel 2010에는 없습니다. –

+0

Excel 2010이 있습니다. 빈 셀이 대문자로 범위에 있습니까? – Tarik

관련 문제