Excel VBA에서 내 체크 박스를 회색으로 표시하고 싶습니다. Checkbox.Enabled = False
을 사용할 때 확인란은 편집 할 수 없지만 회색이 아닙니다. 회색으로 빛나는 효과를 얻으려면 어떻게해야합니까?VBA 회색 확인란
Excel 2010에서 양식 컨트롤 사용. 개발자 탭을 통해 Excel 워크 시트에 직접 삽입되었습니다. VBA 사용자 양식에는 사용되지 않습니다.
감사합니다.
Excel VBA에서 내 체크 박스를 회색으로 표시하고 싶습니다. Checkbox.Enabled = False
을 사용할 때 확인란은 편집 할 수 없지만 회색이 아닙니다. 회색으로 빛나는 효과를 얻으려면 어떻게해야합니까?VBA 회색 확인란
Excel 2010에서 양식 컨트롤 사용. 개발자 탭을 통해 Excel 워크 시트에 직접 삽입되었습니다. VBA 사용자 양식에는 사용되지 않습니다.
감사합니다.
누구나 "불가능합니다"라고 말할 때마다 내 고집스런 조흔에 부딪칩니다. 그래서 나는 당신에게 선물 할 수 있습니다 : "불가능한".
"가시"및 활성화 확인란 :
은 "사용 안 함"확인란을 (당신이 커버 모양의 두 색상 및 투명도에 대한 코드 값을 변경하여 가시성의 정도를 조정할 수) :
기본 아이디어 : 당신이 체크 박스를 통해 반 투명 형태를 배치하고 그것에 더미 매크로를 할당합니다. 이제 체크 상자의 값을 변경할 수 없습니다. "토글 (Toggle)"버튼은 상태를 변경하기위한 것입니다 - 도형을 배치하거나 제거하십시오. 전역 변수를 사용하여 현재 상태를 추적합니다.
마지막으로 반복 할 컬렉션을 수정하면 안되기 때문에 모양을 삭제하거나 추가 할 때는 For Each
을 사용할 수 없습니다. 나는 단순한 "카운트 셰이프 (count shapes)"를 우회하여 숫자 인덱스로 거꾸로 반복했다.
해킹입니까? 내기! 그것은 당신이 요구 한대로합니까? 예!
Dim checkBoxesVisible As Boolean
Option Explicit
Sub toggleIt()
' macro assigned to "Toggle visibility" button
checkBoxesVisible = Not checkBoxesVisible
toggleCheckboxes checkBoxesVisible
End Sub
Sub grayOut(cb)
' put a "cover" shape over a checkbox
' change the color and transparency to adjust the appearance
Dim cover As Shape
Set cover = ActiveSheet.Shapes.AddShape(msoShapeRectangle, cb.Left, cb.Top, cb.Width, cb.Height)
With cover
.Line.Visible = msoFalse
With .Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 255)
.Transparency = 0.4
.Solid
End With
End With
cover.Name = "cover"
cover.OnAction = "doNothing"
End Sub
Sub doNothing()
' dummy macro to assign to cover shapes
End Sub
Sub unGray(cb)
' find the cover shape for the checkbox passed as the argument
' and delete it
' "correct shape" has the name "cover" and is properly aligned with top left
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
If sh.Name = "cover" And sh.Left = cb.Left And sh.Top = cb.Top Then
sh.Delete
Exit For
End If
Next sh
End Sub
Sub toggleCheckboxes(onOff)
Dim s As Shape
Dim n As Integer, ii As Integer
n = ActiveSheet.Shapes.Count
' loop backwards over shapes: if you do a "For Each" you get in trouble
' when you delete things!
For ii = n To 1 Step -1
Set s = ActiveSheet.Shapes(ii)
If s.Type = msoFormControl Then
If s.FormControlType = xlCheckBox Then
If onOff Then
unGray s
Else
grayOut s
End If
End If
End If
Next ii
End Sub
약간의 해킹 -하지만 다음은 작동합니다. 내가 버튼을 클릭하면
Private Sub DisableButton_Click()
CheckBox1.Enabled = Not (CheckBox1.Enabled)
If CheckBox1.Enabled Then
CheckBox1.ForeColor = RGB(0, 0, 0)
Else
CheckBox1.ForeColor = RGB(128, 128, 128)
End If
End Sub
, 체크 박스가 회색으로 표시되고 사용할 수 없게되었습니다 정기적 체크 박스 (CheckBox1
), 나는 다음과 같은 코드로 "DisableButton을"이라는 버튼 - 나는 두 개의 컨트롤과 간단한 사용자 정의 폼을 만들었습니다. 그것을 다시 클릭하면 "인생을 되찾았습니다". 나는 이것이 당신이 찾고 있던 효과라고 생각합니다. 그것이 아니라면 - 그게 주석을위한 것입니다. 여기
는 모습입니다 : 나는 당신이 워크 시트 내에서 무엇을하려고 불가능 두려워
그게 내가 원하는거야,하지만 코드가 작동하지 않습니다. forecolor 사용할 때 "개체가이 속성 또는 메서드를 지원하지 않습니다."오류가 발생합니다. 명확하게하기 위해 확인란은 개발자 탭을 사용하여 VBA의 작성된 사용자 양식이 아닌 Excel 워크 시트에 직접 삽입됩니다. 어쩌면이 오류의 원인입니까? – steventnorris
@steventnorris 스프레드 시트에서 해당 작업을 수행 할 수 없습니다. –
@ mehow 체크 박스를 추가 할 수 없거나 회색으로 변경할 수 없습니다. – steventnorris
어쩌면 이것이 원하는 것일 수 있습니다.
개인 서브 CheckBox1_Click() CheckBox1을 선택하면 checkbox2이 비활성화되어 있는지
If CheckBox1.Value = True Then
CheckBox2.Value = False
CheckBox2.Enabled = False
CheckBox2.ForeColor = rgbBlue
Else
CheckBox2.Visible = True
CheckBox2.ForeColor = rgbAntiqueWhite
CheckBox2.Enabled = True
End If
코드 다세대; 검사하지 않고 전 치환기를 변경합니다. 색상은 원하는 것일 수 있습니다. 엑셀 워크 시트의 확인란과 직접 비교하십시오.
플로리스 'idea 기준.
코드는 모든 컨트롤이 ActiveSheet에 있다고 가정하고 CheckBox1 및 CheckBox2라고하며, 그렇지 않으면 적절하게 변경합니다.
CheckBox1을 클릭 할 때이를 호출 할 수 있으며 선택적인 체크 상태 (참/거짓)로 다른 하위에서 호출하여 CheckBox1을 선택 또는 선택 취소 할 수 있습니다.
CheckBox2 위에 물체를 그리고 그 이름을 "마스크"(당신은 그것을 다른 어떤 이름을 지정할 수 있지만, 당신은 그에 따라 코드를 변경해야 할)
가지 적어 당신의 배경 색상과 불투명도와 같은 채우기 색상을 마스크 약 50 %의
Public Sub CheckBox1_Click(Optional ticked As Variant)
Application.ScreenUpdating = False
ActiveSheet.Unprotect
If Not IsMissing(ticked) Then
If ticked = True Then ActiveSheet.Shapes("CheckBox1").OLEFormat.Object.Value = 1 Else ActiveSheet.Shapes("CheckBox1").OLEFormat.Object.Value = -4146
End If
If ActiveSheet.Shapes("CheckBox1").OLEFormat.Object.Value > 0 Then
ActiveSheet.Shapes("mask").OLEFormat.Object.ShapeRange.ZOrder msoSendToBack
Else
ActiveSheet.Shapes("mask").OLEFormat.Object.ShapeRange.ZOrder msoBringToFront
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.ScreenUpdating = True
End Sub
은 이제 CheckBox1을 틱마다, 마스크 CheckBox2을 숨길 앞에 와서 당신이 그것을을 선택 취소 할 때 마스크를 숨기기를 취소 할 백업 간다. 불투명하기 때문에 회색 효과가 나타나며 활성화/비활성화에 대해 걱정할 필요조차 없습니다.
사용자가 실수로 마스크를 이동하거나 편집 할 수 없도록 워크 시트를 보호해야하지만 SendToBack
/BringToFront
이 작동하려면 보호되지 않아야하므로 코드에서 수행해야합니다. Application.Protect
부분에서 보호 설정을 확인하십시오.
@ mehow 그 대답은 모든 체크 박스의 선택을 해제하는 방법을 보여줍니다. 회색으로 표시하거나 비활성화하는 것은 아닙니다. – steventnorris
체크 박스를 반복하는 방법을 보여줍니다. ActiveX 체크 박스 또는 폼 컨트롤에 대해 이야기하고 있습니까? '회색을 쓴다 '는 것은 무엇을 의미합니까? 그러한 속성이 없다는 것을 보여 주거나 예제를 보여줍니다. –
@mehow 체크 박스를 반복하는 방법을 알고 있습니다. 양식 컨트롤을 사용하고 있습니다. 양식의 필드를 회색으로 표시하는 것은 공용 영역으로 필드를 비활성화하고 거의 회색으로 표시되며 거의 유령으로 간주됩니다. 일반적으로 이것은 양식을 사용할 때 자동 기능이며 컨트롤을 사용할 수 없습니다. – steventnorris