2013-07-24 15 views
7

2007 ve 2010'da uyumlu Excel'de VBA kullanmadan bazı kısıtlamalar içeren bir çalışma kitabı tasarlamaya çalışıyorum. Birkaçını kısıtlamak için XML koduyla "Microsoft Office için Özel UI Düzenleyicisi" ni seçtim. seçenekler: - Bilgi sekmesi ile kaydedin, Ekle, Sil, Sayfayı Taşı/Kopyala, Sayfayı gizle, Sayfaları göster. Ben bunu yaparken başarılı oldu ama Ekle sekmesi için Denetim Adı

enter image description here

hala çalışıyor ve erişilebilir olması insert sayfa sekmesi "ICON" fark etmiş. Dosyada XML aracılığıyla bunu devre dışı bırakmak için beni Kontrol Adına yönlendirebilir misiniz lütfen?

Benim kodudur: Ben de Office Fluent Kullanıcı Arayüzü Kontrol tanımlayıcıları için Microsoft ve rondebruin arama denedi

<?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

Tüm 2010 'idMso's [burada] bulabilirsiniz (http://www.microsoft.com/en-us/download/details.aspx?id=6627) –

+0

Hızlı yanıt için teşekkür ederim Mehow, ben Aynı bir kopyasına sahip, "SheetInsertPage" adlı bir denetimi kullanmayı denedim (yukarıdaki kodda belirtildiği gibi) hala bunu devre dışı bırakamıyorum. Bana daha fazla –

+0

önerebilir misiniz [ilgili olabilir] (http://stackoverflow.com/questions/16766034/hide-new-sheet-tab#comment24774096_16766034). – pnuts

cevap

1

İnceleme sekmesini seçebilir, Çalışma kitabını Koru'yu seçebilir ve Yapı'yı kontrol edebilirsiniz. Bir parola belirtmeniz gerekmez ve Çalışma Sayfası Ekle düğmesi devre dışı bırakılır (ancak yine de görünür).

Yoksa Office Düğmesi Excel Options gidebilir Gelişmiş sekmesi, bu çalışma kitabında için Ekran seçenekleri aşağı kaydırarak göster sac tırnakları işaretini kaldırın.

Bunun XML'den yapılabileceğine inanmıyorum. Yani, bu düğmeyi devre dışı bırakmak veya gizlemek (tüm sayfa sekmelerini gizlemeden). Belki birisi bana yanlış olduğunu kanıtlayabilir;)

+0

Size yanlış olduğunu kanıtlamak için çok uğraştım ama yapamadım ... – Floris

+0

Birisi beni yanlış kanıtladıysa üzülmezdim;) ama UI'nin ayrılmaz bir parçası olduğu için kendimi oldukça güvende hissediyorum. –

+0

Hala başarılabileceğine inanıyorum. Keşfedilmemiş bir karanlık taraf kaldı. Karşılaştığımda bilmene izin veririm. –

4

Bunun XML yoluyla yapılması için öğeye erişebilmeniz gerekir - bir kimliğe sahip olması gerekir. Microsoft'un yayınladığı çeşitli listelerde elle tarama yapmak yardımcı olmadı, ancak belgelerinin kötü bir şekilde belirsiz olması nedeniyle, Excel uygulamasında "kimlikle her kontrol" kimliğini bulan ve çok küçük bir kod parçası yazmaya karar verdim. o: Ben bu çalıştırın ve adını eet ile bir şey üzerinde filtre sonra (onlar msoID çünkü)

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 

, ben "kontrol edilebilir" tüm denetimlerini görmek beklenir ve "ilişki Çarşaflar". herhangi değildir -

enter image description here

Ben gizlemek istediğiniz "düğme" üzerine benim fareyi, ben araç ipucu "Sayfa Ekle" olsun: Aşağıdaki bu ürettiğinin enstantanesidir Listemde görebilirim. Buradan şunu soruyorsunuz: İstediğiniz şeyi yapmak gerçekten imkansızdır - bu düğmeyi XML ile devre dışı bırakamazsınız.

Bu, istediğiniz şeyi elde edemeyeceğiniz anlamına gelmez. Aşağıdaki yaklaşımları öneririm.

  1. Yeni bir sayfa oluşturulduğunda tetiklenen çalışma kitabı olayını yakalayın ve yerinde silin. Düğme "çalışmayı durdurduğunda" insanlar yakında pes edecekler. Aşağıdaki örnek kod.
  2. Sayfa sekmelerini tamamen gizleyin ve sayfalar arasında gezinmenin alternatif bir yöntemini sağlayın. Açıkçası bu, iyi bir fikir olabilecek bir “kontrollü elektronik tablo” olduğu için. Şeritte özel bir sekme oluşturabilir (XML kullanarak, aşina olmuş gibi görünebilir) ya da sayfanın alt kısmında yaşayan eski bir araç çubuğu oluşturabilirdiniz - eski "eski" sekmelerin olduğu yerde.Bu şekilde davranışı simüle edersiniz - ama bu bir çok iş ve bir hack
  3. Çalışma kitabına koruma ekleyin. Kullanım Koruma -> Çalışma Kitabı koruyun -> "yapısını koru": sheets can not be moved, deleted, hidden, unhidden, or renamed. New sheets cannot be inserted.

kodu ThisWorkbook eklemek gerekir ise:

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 

bu, senin kitabında herhangi bir zaman sonra bir kullanıcı tıklama "yeni sayfa" düğmesi çok kısa bir flaş olacak, ancak yeni bir sayfa oluşturulmayacak. Bir Application.ScreenUpdating = False ekleyebilirsin ama kısa bir süre yanıp söner ...

Üzgünüz, sizin için daha iyi haberlerim yok.

+0

Teşekkürler Floris, Ama sadece XML'de bir çözüm aradığımı söylemekten dolayı özür dilerim . Ana amaç, kullanıcının Makrosuz olarak kısıtlanmasıdır; VBA. Sadece XML yoluyla kullanmayı düşündüğüm için bu, paylaştığım dosyaya entegre olur ve böylece kullanıcı daha az ve sınırlı seçeneklerle ayrılır. Çatlamak için yaptığınız çabalar için ne kadar çok teşekkür ederim. Çok daha fazla teşekkür ederim Floris. –

+0

Sadece XML çözümünü istediğini anladım - şüpheliyim (yukarıdakilere göre) bu mümkün olmayabilir. _Why_ arka planda herhangi bir VBA istemediğini, ya da çalışma kitabının yapısını korumayı isteyebilirim. Merak ediyorum ... – Floris

+0

Kullanıcıların çoğu bunun farkında değil. (Bunun yerine korumayı kullanmaya çalıştığımı söylemek isterim; ancak hevesli kullanıcılarımız bunu kırıp her zaman değiştirirler). VBA'yı denedim, eğer birçok durumda güvenlik engellenmiş/izinli değilse; sonra hedef kaybolur.Araştırmadan sonra daha güvenli (benim kullanıcıların kaynaklarına ve koşullarına göre) xml ile geldi. –

İlgili konular