2013-07-24 2 views
7

2007 년과 2010 년에 호환되는 Excel에서 VBA를 사용하지 않고 몇 가지 제한 사항이있는 통합 문서를 디자인하려고합니다. Microsoft Office 용 사용자 지정 UI 편집기를 XML 코드로 선택하여 옵션 : - 정보 탭, 삽입, 삭제, 시트 이동/복사, 시트 숨기기, 시트 숨김 해제와 같은 저장. 나는 이렇게 성공했지만, 난 삽입 탭의 컨트롤 이름

enter image description here

가 여전히 작동하고 액세스 할 수 있습니다이 삽입 시트 탭 "ICON"을 발견했습니다. 누구든지 파일 이름에 XML을 사용하지 않도록 제어 이름을 가르쳐 주시겠습니까?

내 코드입니다 : 나는 또한 사무실 Fluent 사용자 인터페이스 컨트롤 식별자를 위해 마이크로 소프트와 rondebruin 검색 시도

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> 
    <commands> 
       <command idMso="FileSaveAsWebPage" enabled="false" /> 
       <command idMso="FileSaveAs" enabled="false" /> 
       <command idMso="FileSaveAsMenu" enabled="false" /> 
       <command idMso="FileSaveAsExcelXlsx" enabled="false" /> 
       <command idMso="FileSaveAsExcelXlsxMacro" enabled="false" /> 
       <command idMso="FileSaveAsExcel97_2003" enabled="false" /> 
       <command idMso="FileSaveAsExcelOpenDocumentSpreadsheet" enabled="false" /> 
       <command idMso="FileSaveAsPdfOrXps" enabled="false" /> 
       <command idMso="FileSaveAsOtherFormats" enabled="false" /> 

       <command idMso="SheetInsert" enabled="false" /> 
       <command idMso="SheetInsertPage" enabled="false" /> 
       <command idMso="SheetDelete" enabled="false" /> 
       <command idMso="SheetRename" enabled="false" /> 
       <command idMso="SheetMoveOrCopy" enabled="false" /> 
       <command idMso="SheetUnhide" enabled="false" /> 
       <command idMso="SheetProtect" enabled="false" /> 
       <command idMso="SheetTabColorGallery" enabled="false" /> 
       <command idMso="SheetTabColorMoreColorsDialog" enabled="false" /> 
      <command idMso="SelectAllSheets" enabled="false" /> 
    </commands> 
    <backstage> 
      <tab idMso="TabInfo" visible="false"/> 
    </backstage> 
</customUI> 

.

+0

2010 년'idMso' [여기]를 모두 찾을 수 있습니다. (http://www.microsoft.com/en-us/download/details.aspx?id=6627) –

+0

빠른 응답을 주셔서 감사합니다. 예 같은 사본을 가지고, 나는 "SheetInsertPage"(위의 코드에서 언급 한)라는 컨트롤을 사용하여 시도했지만 여전히 사용할 수 없게 만들 수 없습니다. 당신은 나를 더 제안 할 수 –

+0

[5 월 관련이있다] (http://stackoverflow.com/questions/16766034/hide-new-sheet-tab#comment24774096_16766034). – pnuts

답변

1

검토 탭을 선택하고 통합 문서 보호를 선택한 다음 구조를 선택할 수 있습니다. 암호를 지정할 필요가 없으며 워크 시트 삽입 단추가 비활성화됩니다 (그러나 계속 표시됨).

아니면 Office 단추에서 Excel 옵션에 갈 수 고급 탭이 통합 문서에 대한 표시 옵션으로 스크롤 표시 시트 탭 선택을 취소합니다.

저는 이것이 XML에서 할 수 있다고 생각하지 않습니다. 즉, 모든 시트 탭을 숨기지 않고이 버튼을 비활성화하거나 숨길 수 있습니다. 아마도 누군가가 나를 잘못 알았을 수도 있습니다.)

+0

내가 틀린 것을 증명하려고 열심히 노력했지만, 나는 그것을 할 수 없었다. ... – Floris

+0

누군가가 틀렸다는 것을 증명하면 나는 화를 내지 않을 것이다.) 그러나 UI의 필수 부분이기 때문에 나는 꽤 확신한다. –

+0

나는 아직도 그것이 달성 될 수 있다고 믿는다. 탐험을 떠난 어두운면이 남아 있습니다. 일단 내가 오면 알려주지. –

4

XML을 통해이 작업을 수행하려면 요소에 액세스 할 수 있어야합니다. ID가 있어야합니다. Microsoft가 게시 한 다양한 목록을 수동으로 스캔하는 것은 아무런 도움이되지 못했지만 문서가 유별 스럽기 때문에 악명이 높았 기 때문에 Excel 응용 프로그램에 "ID가있는 모든 컨트롤"의 ID를 찾는 매우 작은 코드를 작성하고 목록 이 : 나는 이것을 실행하고 이름 eet으로 어떤 필터링 후 (그들이 msoID을 가지고 있기 때문에)

Sub listID() 
Dim r As Range 
Dim ctls 
Dim ii As Long 

Cells(1, 1).Value = "ID" 
Cells(1, 2).Value = "caption" 
Cells(1, 3) = "Type" 
Set r = Range("a1") 

For ii = 1 To 100000 
    Set ctls = CommandBars.FindControl(Id:=ii) 
    If Not (ctls Is Nothing) Then 
    'Debug.Print "controls ID " & ii & " exists; the caption is " & ctls.Caption & "; the type is " & ctls.Type 
    Set r = r.Offset(1, 0) 
    r.Value = ii 
    r.Offset(0, 1) = ctls.Caption 
    r.Offset(0, 2) = ctls.Type 
    r.Offset(0, 3) = ctls.TooltipText 
    End If 
Next ii 

End Sub 

, 나는 "제어 할 수 있습니다"모든 컨트롤을 보여야하는데 그것은 "에 관련 시트 ". 의 어떤 아니다 -

enter image description here

난 당신이 숨기려는 "버튼"을 통해 내 마우스를, 내가 툴팁 "를 삽입 시트"를 얻을 : 다음은이 생산 무엇의 스냅 샷입니다 내 목록에서 볼 수있는 것들. 결론적으로 당신이 묻는 것을 실제로하는 것은 불가능합니다. XML로 그 버튼을 비활성화 할 수는 없습니다.

그렇다고해서 원하는 것을 얻을 수 없다는 의미는 아닙니다. 나는 다음 접근법을 제안 할 것이다.

  1. 새 시트가 만들어 질 때 트리거되는 통합 문서 이벤트를 트랩하고 그 자리에서 삭제하십시오. 버튼이 "작동을 멈 추면"사람들은 곧 포기할 것입니다. 아래 예제 코드.
  2. 시트 탭을 완전히 숨기고 시트 사이를 이동하는 다른 방법을 제공하십시오. 이것은 분명히 어쨌든 좋은 아이디어가 될 수있는 "통제 된 스프레드 시트"이기 때문에. 리본에 사용자 정의 탭을 만들거나 (XML을 사용하면 익숙한 것 같습니다) 시트의 맨 아래에있는 "이전"탭 근처의 부동 도구 모음을 만들 수 있습니다.그런 식으로 동작을 시뮬레이트합니다. 그러나 많은 작업과 약간의 해킹이 있습니다.
  3. 통합 문서에 보호 기능을 추가하십시오. 사용 보호 -> 통합 문서 보호 -> "구조를 보호"sheets can not be moved, deleted, hidden, unhidden, or renamed. New sheets cannot be inserted.

코드는 ThisWorkbook에 추가 할 것입니다 :

Private Sub Workbook_NewSheet(ByVal Sh As Object) 
    Dim temp As Boolean 
    temp = Application.DisplayAlerts 
    Application.DisplayAlerts = False 
    Sh.Delete 
    Application.DisplayAlerts = temp 
End Sub 

이 통합 문서에 언제든지되면 사용자가 클릭 "새로운 시트"버튼은 아주 짧은 플래시 일 것이지만 새로운 시트는 생성되지 않습니다. Application.ScreenUpdating = False을 추가 할 수 있지만 간단한 플래시가 남아 있습니다 ...

죄송합니다. 좋은 소식이 없습니다.

+0

감사합니다. Floris,하지만 저는 XML로만 솔루션을 찾고 있습니다. . 주요 목표는 매크로없이 사용자를 제한하는 것입니다. VBA. 나는 이것이 내가 공유하는 파일에 통합되어 더 적은 제한된 옵션으로 사용자를 떠나는 것처럼 XML을 통해서만 사용하는 것을 고려했다. 크래킹에 대한 당신의 노력에 얼마나 감사 드려요? 플로리 스에게 감사드립니다. –

+0

나는 XML 유일한 해결책을 요구했다는 것을 깨닫는다 - 나는 (위에 근거하여) 그것이 가능하지 않을 것으로 생각한다. _ 배경 _에서 VBA를 원치 않거나 워크 북 구조를 보호하지 않겠습니까? 문제가 해결되는 것으로 보입니다. 나는 호기심 ... – Floris

+0

내 사용자 대부분은 그것을 알고하지 않습니다. (대신 나는 보호 기능을 사용해 보았다고 말하고 싶지만, 열광적 인 사용자는 그것을 깨뜨리고 항상 수정한다.) 나는 VBA를 시도했는데, 많은 경우에 보안이 비활성화/허용되지 않으면 발견했다. 그때 목표는 잃어 버렸습니다. 검색을 끝내고 나서 xml이 더 안전 해졌습니다 (내 사용자의 리소스 및 조건에 따라). –