나는 액티브 X를 삭제하려고 OLEObject
시트에서 다음을 시작 UserForm
으로 vbModeLess
.
아래 코드에서 :
먼저, 서브 는 캡션과 이름이있는 시트 "mySheet"에 OLEObject
(a Label
)를 생성합니다 .
Sub creteOleo()
Dim rng As Range
Set rng = Sheets("mySheet").Range("B2:C3")
With Sheets("mySheet").OLEObjects.Add(ClassType:="Forms.Label.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=rng.Left, _
Top:=rng.Top, _
Width:=rng.Width, _
Height:=rng.Height)
.Name = "myOleo" 'A name
.Object.Font.Size = 13
.Object.Caption = "test"
End With
End Sub
그런 다음 그것을 삭제하는 서브는 상태와 함께 UserForm을 시작합니다 (UserForm은 레이블을 포함하고 테스트 용이므로 내부에 코드가 없음) vbModeLess
.
Sub deleteOleo()
Sheets("mySheet").OLEObjects("myOleo").Delete
UserForm1.Show vbModeless
End Sub
여기에 문제가 있습니다. 특정 OLEObject를 삭제 한 다음 UserForm을 시작하면 예상대로 OLEObject가 삭제되지만 UserForm은 사라지기 전에 잠시 나타납니다.
이 문제는 UserForm이 vbModeLess
상태에서 시작될 때만 나타나 므로 작동하는 다른 방법 (개체를 삭제하는 대신 숨기기)을 시도했지만 VBA가 그런 방식으로 작동하는 이유를 알고 싶습니다.
내 이해는 Excel이을 UserForm1.Show
삭제 한 후 실행하기 OLEObject
때문에 방해해서는 안된다는 것입니다. 또한 모든 개체를 삭제하는 것이 아니라 특정 개체 만 삭제하는 것과 같습니다.
예, 이것은 문서화되지 않은 버그입니다 (적어도 관련 문서를 찾지 못했습니다). 다음을 수행하여 원하는 것을 얻을 수 있다고 말했습니다.
논리
Modal
UserForm_Activate()
이벤트 변화가에 백업 Modeless
.모듈에서
Option Explicit
Sub creteOleo()
Dim rng As Range
Set rng = Sheets("mySheet").Range("B2:C3")
With Sheets("mySheet").OLEObjects.Add(ClassType:="Forms.Label.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=rng.Left, _
Top:=rng.Top, _
Width:=rng.Width, _
Height:=rng.Height)
.Name = "myOleo" 'On lui donne un nom
.Object.Font.Size = 13
.Object.Caption = "test"
End With
End Sub
Sub deleteOleo()
Sheets("mySheet").OLEObjects("myOleo").Delete
DoEvents
Dim frm As New UserForm1
frm.Show
End Sub
사용자 양식 코드에서
Option Explicit
Private Declare Function EnableWindow Lib "user32.dll" (ByVal hWnd As Long, _
ByVal fEnable As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetParent Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Sub UserForm_Activate()
EnableWindow GetParent(FindWindow(vbNullString, Me.Caption)), 1
End Sub
행동
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다