2016-09-01 17 views
1

데이터 입력 용도로 사용되는 사용자 정의 폼을 여는 Form Control이있는 스프레드 시트 작업을하고 있습니다. 양식의 제출 단추는 셀 행을 채우고 행의 마지막 두 셀에 두 개의 단추를 추가합니다. 사용자가 수행하는 행 수와 각 새 단추가 고유 한 이름으로 작성 될 때마다 행이 삽입됩니다. 그러나 이들은 ActiveX 컨트롤이며 동료가 파일을 열고 랩톱에서 사용하려고하면 다른 Windows/Office 버전과의 호환성 문제가 발생합니다. 프로그래밍 방식으로 양식 컨트롤을 추가 할 수 있습니까?

내가 (그것은 단지 다른 변수 본질적으로 다른 버튼에 대해 동일) 스프레드 시트에 명령 단추 중 하나를 추가 사용하고 코드입니다 :

Dim i As Long, Hght As Long 
Dim Name As String, NName As String 


i = 0 
Hght = 305.25 

NName = "cmdAction" & i 

For Each OLEObject In ActiveSheet.OLEObjects 
    If Left(OLEObject.Name, 9) = "cmdAction" Then 
     Name = Right(OLEObject.Name, Len(OLEObject.Name) - 9) 
     If Name >= i Then 
      i = Name + 1 
     End If 
     NName = "cmdAction" & i 
     Hght = Hght + 27 
    End If 
Next 
    Dim UpdateEntry As OLEObject, N% 

Set UpdateEntry = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ 
    , DisplayAsIcon:=False, Left:=Selection.Offset(0, 23).Left, Top:=Selection.Offset(0, 23).Top, Width:=72, Height _ 
    :=24) 


UpdateEntry.Name = NName  
UpdateEntry.Object.Caption = "Edit Entry" 
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule 
    N = .CountOfLines 
.InsertLines N + 1, "Private Sub " & NName & "_Click()" 
.InsertLines N + 2, vbTab & "Code for button goes here" 
.InsertLines N + 3, vbTab & "End Sub" 
End With 

나는 그것이 궁금했다 동일한 작업을 수행 할 수 있었지만 만든 단추는 ActiveX 대신 폼 컨트롤입니까?

표시되는 오류는 런타임 오류 32809 : 응용 프로그램 정의 또는 개체 정의 오류입니다. 광범위한 연구 끝에 Windows의 다른 버전이 변경되면 시트가 손상되어 발생하는 것으로 나타났습니다. 이 문제를 해결할 수있는 유일한 방법은 새 시트를 만들어 모든 시트 내용을 새 시트에 복사하고 손상된 시트를 삭제 한 다음 새 시트의 이름을 이전 이름으로 변경하는 것입니다. 이 작동하지만 ActiveX 컨트롤을 복사 할 수 없습니다. 사용자 정의 폼을 여는 데 사용되는 스프레드 시트의 양식 컨트롤이 올바르게 작동하기 때문에 이름이 바뀌고 해당 코드가 포함되지 않기 때문에 복사 할 수 없습니다. 내 유일한 해결책은 모든 ActiveX를 Form Control로 변경하는 것이라고 생각합니다.

도움을 주셔서 감사합니다.

+0

구체적으로 이렇게 한 적이 없지만이 링크는 어떤 용도로 사용됩니까? [링크] (http://www.ozgrid.com/Excel/free-training/ExcelVBA2/excelvba2lesson21.htm) 오브젝트가 필요해 보이는 것처럼 보입니다. – Clusks

+0

그 소리는 시작처럼 들리지만, 많은 감사. – user6782845

답변

0

ActiveX 단추를 사용하는 대신 Shapes를 사용하고 Shape.OnAction 속성을 설정하여 일반적으로 ActiveX 단추 뒤에 배치 할 매크로를 호출하십시오. 매크로에서 Application.Caller를 사용하여 클릭 한 모양의 이름을 가져올 수 있으므로 클릭 한 단추를 알고 그에 따라 코드를 분기 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 양식 컨트롤과 동일한 방식으로 도형이 셀에 연결됩니까? 복사 할 전체 시트를 선택하면 양식 컨트롤도 복사되지만 ActiveX 시트는 복사되지 않습니다. 도형은 셀에도 복사됩니까? – user6782845

+0

예, 도형이 복사됩니다. –