OLEObjects 및 Userform 간의 충돌

로물 락스 14

나는 액티브 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때문에 방해해서는 안된다는 것입니다. 또한 모든 개체를 삭제하는 것이 아니라 특정 개체 만 삭제하는 것과 같습니다.

Siddharth Rout

예, 이것은 문서화되지 않은 버그입니다 (적어도 관련 문서를 찾지 못했습니다). 다음을 수행하여 원하는 것을 얻을 수 있다고 말했습니다.

논리

  1. 양식 표시 Modal
  2. 에서 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

날짜 및 시간 충돌 찾기

분류에서Dev

시간 및 날짜 충돌-SQL 서버

분류에서Dev

버전 2 및 3 간의 부트 스트랩 sass gem 충돌

분류에서Dev

SwiftUI의 스크롤 및 번역 충돌

분류에서Dev

Jackson 충돌 속성 및 getter 정의

분류에서Dev

움직이는 지점과 움직이는 선분의 충돌 위치 및 시간 (연속 충돌 감지)

분류에서Dev

테이블의 모든 ID 간의 SQL 시간 입력 및 시간 초과 충돌

분류에서Dev

직렬 포트 읽기 및 쓰기 코드 간의 연결 충돌

분류에서Dev

ExecuteScalar 및 ExecuteNonQuery 충돌

분류에서Dev

okhttp 및 facebook 충돌

분류에서Dev

ScrollView 및 GridView 충돌

분류에서Dev

Realm 및 CocoaPods 충돌

분류에서Dev

CCSprite 간의 충돌 감지

분류에서Dev

CCSprite 간의 충돌 감지

분류에서Dev

freefem ++와 fglrx 간의 충돌

분류에서Dev

onPauseState의 충돌

분류에서Dev

CSS의 충돌

분류에서Dev

PPSSignatureView의 충돌

분류에서Dev

ArcRotateCamera의 충돌

분류에서Dev

제한 시간과 함께 Heroku nodejs / mongoose 및 mLab 앱 충돌

분류에서Dev

Excel 및 VBA가 매크로를 통해 중간에 충돌

분류에서Dev

단어의 백 슬래시 충돌 및 Pyparsing의 줄 바꿈

분류에서Dev

TSLint 및 VS 코드 형식 문서의 충돌

분류에서Dev

맵의 플레이어 및 블록에 대한 충돌 감지

분류에서Dev

ORDER BY 및 Equals 대 IN을 사용한 충돌의 Postgres 동작

분류에서Dev

OpenGL의 창 충돌 및 부분 렌더링

분류에서Dev

각도의 충돌 글꼴 및 아이콘

분류에서Dev

각도의 충돌 글꼴 및 아이콘

분류에서Dev

MongoDB 및 NodeJ와의 동시 쓰기 충돌