2017-02-02 9 views
0

트래커 용 activex 단추를 만들었습니다. 직장에서의 빌드로 임명되었습니다. 나는 그것을 내보낼 때 무한한 호환성과 권한 문제가있었습니다. 대신 매크로 사용 가능 모양으로 만들기로 결정했습니다. 그것은 당신이 그것을 클릭 할 때 현재 시간과 날짜를 현재 셀에 입력하는 간단한 버튼으로되어 있습니다. 그게 작동, 문제는 그것이 더 이상 떠 다니는 것처럼 그것은 activex 버튼이었을 때, 그것은 페이지 아래쪽에있는 활성 셀을 따르지 않는다는 것입니다. 또한 - 액티브 X가 아니기 때문에 버튼 클릭을 시뮬레이트하지 않습니다. 코드를 넣으려고하는데, 으로 보입니다.하지만 클릭 할 때 우울증은 없습니다. 여기 내가 지금까지 가지고있는 것이있다.ActiveX 컨트롤로 작동하는 Excel의 단추가 모양으로 바뀌어야합니다. 이제는 작동하지 않습니다. 100 %

Sub RectangleRoundedCorners1() 
Dim vTopType As Variant 
Dim iTopInset As Integer 
Dim iTopDepth As Integer 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     vTopType = .BevelTopType 
     iTopInset = .BevelTopInset 
     iTopDepth = .BevelTopDepth 
    End With 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = msoBevelSoftRound 
     .BevelTopInset = 12 
     .BevelTopDepth = 4 
    End With 
    Application.ScreenUpdating = True 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = vTopType 
     .BevelTopInset = iTopInset 
     .BevelTopDepth = iTopDepth 
    End With 
End Sub 

Sub RectangleRoundedCorners1_Click() 
    ActiveCell.Value = Now() 
    ActiveCell.NumberFormat = "MM/DD/YY hh:mm:ss" 
End Sub 

Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
    With Cells(Windows(1).ScrollRow, Windows(1).ScrollColumn) 
     RectangleRoundedCorners1.Top = .Top + 10 
     RectangleRoundedCorners1.Left = .Left + 825 

    End With 
End Sub 
+0

페이지에 양식 버튼을 추가 할 수 있습니까? 개발자 탭에 삽입하고 activex 버튼 대신 양식 버튼을 선택하십시오. 마우스 오른쪽 버튼을 클릭하여 속성을 설정하고 셀과 함께 이동할지 여부를 선택할 수 있습니다. 클릭하면 하위를 선택할 수 있습니다. –

+0

나는 그것을 시도했지만 작동하지 않았다. 매크로가 활성화 된 모양에 대한 권장 사항을 얻으려고했을 때 팀이 activex 버튼을 사용하여 실행했던 것과 동일한 많은 문제를 일으킬 수 있다고 말했다. 그럼에도 불구하고, 클릭 할 때 버튼이 눌려있는 버튼을 표시 할 수 있도록해야하는 코드의 상단 부분을 포함하여 매크로 사용 가능 모양에 대해이 작업을 수행하는 방법을 알고 싶습니다. – Cdhippen

+0

마우스 오른쪽 버튼 팝업을 사용하고 싶습니다. 메뉴를 사용하여 특수 기능을 시작하십시오. Ron DeBruin은 훌륭한 코드 소스를 가지고 있습니다. http://www.rondebruin.nl/win/s6/win002.htm 일반적인 마우스 오른쪽 버튼 팝업 메뉴에 함수를 추가하고 "Insert Date"와 같은 레이블을 지정한 다음 마우스 오른쪽 버튼으로 셀을 클릭하고 레이블이 팝업에 표시됩니다. 유일한 단점은 통합 문서가 닫을 때 통합 문서를 제거해야한다는 것입니다. 간단한 onClose 코드가 그렇게 할 것입니다. –

답변

0

셰이프 개체에는 ActiveX 개체와 같은 메서드가 없습니다. 또한 VB 내부가 아닌 Excel 통합 문서에만 존재하기 때문에 개체와 동일한 이름의 메서드를 만들어 참조 할 수 없습니다. 당신은 그 두 개의 서브를 하나로 합친 다음 버튼을 오른쪽 버튼으로 클릭하고 "Assign Macro ..."옵션을 사용하여 그 서브를 그것에 할당 할 수 있습니다. 는 IT가 시트에 따라 점점에 관해서는

Sub ButtonClick() 
Dim vTopType As Variant 
Dim iTopInset As Integer 
Dim iTopDepth As Integer 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     vTopType = .BevelTopType 
     iTopInset = .BevelTopInset 
     iTopDepth = .BevelTopDepth 
    End With 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = msoBevelSoftRound 
     .BevelTopInset = 12 
     .BevelTopDepth = 4 
    End With 
    Application.ScreenUpdating = True 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = vTopType 
     .BevelTopInset = iTopInset 
     .BevelTopDepth = iTopDepth 
    End With 

    ActiveCell.Value = Now() 
    ActiveCell.NumberFormat = "MM/DD/YY hh:mm:ss" 
End Sub 

, 당신은 (이 코드는 워크 시트 당신의 버튼에 대한 모듈 내부에 있어야합니다) 첫번째 모양 객체에 대한 유효한 참조를 얻을 필요가있다. enter image description here

Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 

Dim shButton As Shape 

Set shButton = Shapes("RectangleRoundedCorners1") 

With Cells(Windows(1).ScrollRow, Windows(1).ScrollColumn) 
    shButton.Top = .Top + 10 
    shButton.Left = .Left + 825 
End With 

End Sub 
+0

감사합니다!나는 내일 들어올 때 이것을 시도 할 것이다 – Cdhippen

+0

이 방법을 시도하면, 다음 시트 부분을 제외한 모든 것이 나에게 잘 보이기 때문에 "RectangleRoundedCorners1"대신 "ButtonClick"에 매크로를 할당하고 컴파일 할 때 에서 "하위 또는 기능 정의하지": 그것은 오류가 발생합니다 단어 "모양"나는 수동 rectangleroundedcorners1라는 두 번째 매크로를 추가하는 시도 – Cdhippen

+0

를 참조 설정 shbutton = 모양 ("rectangleRoundedCorners1") 하지만 그건 그냥 만들어 해당 이름을 가진 하위 개체이며 개체에 연결하지 않습니다. 문제는 코드의 두 번째 비트를 객체에 연결하는 방법을 확신 할 수 없다는 것입니다. – Cdhippen

0

모양에 변화는 인간의 눈으로는 거의 볼 수 없음을 너무 빨리 발생합니다. 사용자가 키 클릭을 인식 할 수 있도록 변경 사항을 충분히 오래 유지하기 위해 for 루프를 두었습니다.

워크 시트 모듈이 아닌 일반 모듈에 다음 코드를 입력하십시오. 이 셰이프와 관련된 모든 워크 시트 모듈 코드를 삭제하십시오.

마우스 오른쪽 버튼으로 모양을 클릭하고 "매크로 지정"을 일반 모듈의 여기에 추가하십시오. 사용자가 스크롤 할 때 제 위치에 머물게하는 방법을 모르지만 적어도 시각적 인 문제를 해결할 것입니다.

또한 셀 A1에 날짜가 변경되었습니다.

Sub RectangleRoundedCorners1() 
Dim vTopType As Variant 
Dim iTopInset As Integer 
Dim iTopDepth As Integer 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     vTopType = .BevelTopType 
     iTopInset = .BevelTopInset 
     iTopDepth = .BevelTopDepth 
    End With 

For i = 1 To 70 
' This change happens too quickly for the eye to see 
' Put a small for loop so the visual change can be seen 
    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = msoBevelSoftRound 
     .BevelTopInset = 12 
     .BevelTopDepth = 4 
     .Visible = True 
    End With 
    Application.ScreenUpdating = True 
    ActiveSheet.Shapes(Application.Caller).ThreeD.Visible = True 
Next i 

    With ActiveSheet.Shapes(Application.Caller).ThreeD 
     .BevelTopType = vTopType 
     .BevelTopInset = iTopInset 
     .BevelTopDepth = iTopDepth 
    End With 


    ActiveSheet.Range("A1").Value = Format(Now(), "mmm dd, yyyy") 

End Sub