Excel özel işlev ipucu arayışı


101

Bu soru olmuştur istendi önce , ancak her zaman kabul cevap basitçe kullanarak işlev açıklamaları sağlamak için bir istifa olduğunu Application.MacroOptions( VBA6 ) ( VBA7 ), ama benim sorunu çözmez bu nedenle bu bilgiler aslında, bir ipucu olarak görünmüyor.

Amaç

Hepimizin arzuladığı şey, özel işlevleri herhangi bir yolla (VBA, VSTO veya COM eklentisi) tanımlayabilmek ve kullanıcıya işlevin ve parametrelerinin bir açılır / araç ipucu açıklamasından yararlanmasını sağlamaktır. her yerleşik Excel işlevi için satır içi veya formül çubuğunda görünür:

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Bu ihtiyaca genel olarak kabul edilen cevap, özel işlevler için mümkün olmadığıdır, ancak bu inanca meydan okumak istiyorum.

Sorun

Şu anda, birinin yaptığını gördüğüm en iyi şey, işlevleri tanımlamaktır (genellikle yukarıdaki MacroOptions çağrısını kullanarak), böylece işlev iletişim kutusunu (formül çubuğundaki fx düğmesi) açarken işlev ve parametre açıklamaları aşağıdaki gibi görünür:

görüntü açıklamasını buraya girin

Gördüğünüz gibi, bu birçok parametresi olan karmaşık bir işlevdir. Kullanıcı bu "işlev bağımsız değişkenleri" diyaloğunun ve onu nasıl ortaya çıkaracağının farkında değilse ve bunun yerine yalnızca Excel'in standart araç ipucuna aşinaysa, yalnızca formül adını görür ve ek yardım almaz:

görüntü açıklamasını buraya girin

Bununla birlikte, gerekli parametreleri doğru şekilde sağlama şansları yoktur. (Elbette hiçbir kullanıcının okumadığı belgeleri okumadan.)

Şimdi, uzman bir kullanıcı Ctrl+ Shift+ yazarak Akendisine aşağıdaki gibi otomatik olarak tamamlanmış bir işlev parametreleri listesi verileceğini biliyor olabilir :

görüntü açıklamasını buraya girin

Ancak elbette, yukarıdakiyle aynı problemimiz var, standart excel kullanıcıları yalnızca ilk görüntüden varsayılan davranışa alışacak ve muhtemelen bu özelliği asla öğrenmemiş olacak.

Bu noktada bunun neden yeterli olmadığı ve her yerleşik işlevin sahip olduğu şeyi istediğimizi - kullanıcıya işlevi nasıl kullanacağını söyleyen sıralı araç ipucu - istediğimiz anlaşılmalıdır.

Tease

İlk başta, bunun yerel Excel uygulama işlevleri dışında mümkün olmadığına ikna olmuş olabilirim. Eklentiler ve VBA, genişletilebilirlik özellikleridir ve bu araç ipucu genişletilebilir olmayabilir. Ancak bu teori, Analiz Araç Paketi eklentisinin varlığıyla karşı karşıyadır. Elbette, Microsoft'ta yerleşiktir, ancak ANALYS32.xll, VB, C, C ++ ve C # ile üretilebilenler gibi bağımsız bir XLL eklentisidir. Elbette, bu XLL uygulamaya yüklendiğinde , kullanılabilir hale getirdiği işlevler yerel excel işlevleriyle aynı araç ipuçlarına sahiptir:

görüntü açıklamasını buraya girin

Elbette bu bilgi bir şekilde bu XLL dosyasında kodlanmış ve Excel'e aktarılmışsa, kendi Eklentilerimizle çoğaltmanın bir yolu var mı? Şimdi kendime biraz kaynak kod çözme hakkında öğretmeye başlayacağım ve analiz araç paketinde neler olup bittiğini tersine mühendislik yapıp yapamayacağımı görmeye başlayacağım.

Nasıl yardım edebilirsin

Bu sorunla ilgili halka açık tüm bilgileri araştırdığıma neredeyse eminim. Birisi bu konuda yardımcı olabilecek bilmediğim bir şey biliyorsa, rahatlıkla haber verin. Tersine mühendislik derlenmiş dll / xll'lere pek aşina değilim, bu nedenle birisi yerel Analysis32.xll kopyasını açıp açacaksa özel fonksiyon tanımlarında neler olup bittiğini bulmak için çok minnettar olurum. Aksi takdirde, tüm çıkmazlara ulaşana ve bulduğum şeyi geri bildirene kadar bunu kendim araştırmaya devam edeceğim.


4
Mevcut teknolojilerden herhangi birini kullanarak mevcut Excel sürümlerinde UDF argümanları için araç ipuçları oluşturmak veya göstermek mümkün değildir. MVP tarafından Kaynak: answers.microsoft.com/en-us/office/forum/office_2007-customize/...
silkfire

.NET Reflector, ANALYS32.xll dosyasını açamadı ve bunun bir .NET Derlemesi olmadığı sonucuna vardı. Bu beni şaşırtıyor. Görünüşe göre onu assembly diline dönüştürmeye çalışmam gerekecek mi?
Alain

5
Kulağa ilginç geliyor, ancak geçmişte (ofis 97) winapi'yi kullanarak ipuçları yaptım. Ve bu şekilde yapabilirsiniz. Bu ilginçse, bilgiyi araştırabilir ve ondan bir cevap çıkarmaya çalışabilirim.
Archlight

1
Ben de alacağım, bunu kazmak biraz zaman alacak. Ama başkalarının kullanması için buraya gelmeli. Winapi / vba / düşük ve kötü kombinasyonu ve sanırım onu ​​vb.dll olarak yaptım ama .net'e kadar kaldırma sorunu yok
Archlight

1
Görünüşe göre Excel geliştirme ekibi bu özellik için burada oy alıyor: excel.uservoice.com/forums/…
Alain

Yanıtlar:


40

Bunu uygulayarak Excel-DNA IntelliSense projesi olarak GitHub'a bir kavram kanıtı projesi gönderdim .

Uygun Excel kullanıcı arabirimi olaylarını izlemek için UI Otomasyon sınıflarını kullanarak, uygun olduğunda bir form görüntülenir.

Kod bir Excel-DNA eklentisi olarak sarılmış ve Excel 2013 / Windows 8 makinemde çalışıyor. Başka bir yapılandırmada (Windows Server 2008 üzerinde 64 bit Excel 2010) test ettim ve ciddi sorunlar yaşadım.

Bunun gibi Excel-DNA öznitelikleriyle tanımlanan bir C # işlevi için:

[ExcelFunction(Description = 
    "A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
    [ExcelArgument(Name = "Augend", 
                   Description = "is the first number, to which will be added")] 
    double v1,
    [ExcelArgument(Name = "Addend", 
                   Description = "is the second number that will be added")]     
    double v2)
{
    return v1 + v2;
}

hem fonksiyon açıklamasını alıyoruz

Fonksiyon Açıklama

ve işlevi seçerken argüman yardımı alırız

Bağımsız Değişken Yardımı

Bu güzel görünüyor, ancak hepsi hala çok kesintili, yalnızca makinemde çalışıyor ve bazen Excel'in çökmesine neden oluyor. Yine de bir başlangıç ​​olabilir ...


9 Mayıs 2014 Güncellemesi:

Argümanın eski Excel ve Windows sürümleri altında çalışmasına nasıl yardımcı olacağımı bulmak için biraz ilerleme kaydettim. Bununla birlikte, her şeyi güvenilir hale getirmek için hala oldukça fazla çalışmaya ihtiyacı var. Bu konuda yardımcı olmak isteyenler lütfen doğrudan benimle iletişime geçmelidir.


18 Haziran 2016 Güncellemesi:

Hem Excel-DNA eklentileri hem de VBA işlevleri için Excel UDF IntelliSense desteği artık test ediliyor. Talimatlar için GitHub'daki Başlarken sayfasına bakın .


Ne yazık ki, yardım bağımsız değişkeninin kullandığı UI Otomasyonu TextRange desteği için Excel 2013 veya Windows 8 veya her ikisi de gerekli görünüyor. Biraz Windows UI Otomasyonu deneyimi olan herkesten haber almak isterim ...
Govert

Daha eski makinelere derlemeden önce eski Excel derlemelerine başvurmayı denediniz mi?
Daniel Möller

1
Excel nesne modeline yapılan referanslar buna gerçekten dahil değildir. Ama şeyleri etkileyebilir kesinlikle farklı UI Otomasyon versiyonları ... vardır
Govert

1
Bu şimdiye kadarki her şeyin önünde caddeler, bu yüzden ödül için oyumu alacaksınız. Yakın gelecekte bu çözüme katkıda bulunup bulunamayacağımı görmek niyetindeyim, bu nedenle çekme talebime dikkat edin!
Alain

@Alain Govert'e iyi iş çıkardın! & Alain bu konuda ustalaşmanı görmek isterim.
CodeCamper

1

Ne dersin

  1. Hücrenin tuşa basma olayına giren metni yakalayın. bunun gibi
  2. Metnin özel işlevlerle eşleşip eşleşmediğini kontrol edin.
  3. Eşleşiyorsa, bir araç ipucu gibi davranmak için etiket veya şekil gibi bir şey gösterin. bunun gibi

Bu kabul edilebilir mi?

Biraz çirkin ama daha kolay.


Bu, düşündüğüm ilginç bir başlangıç ​​noktasıydı, ancak daha gelişmiş bir formül düzenleme biçimleriyle karşılaşıldığında zorluklarla karşılaştım (örneğin ortadaki bir yeri tıklayıp karakterleri silme / ekleme veya formülün bir bölümünü vurgulayıp üzerine yazma veya kullanma gibi) başka bir formülün ortasında özel bir formül.) Bunlar, tuş basışlarını kontrol etmekten daha fazlasını gerektirir, düzenlemenin ortasında formül çubuğunun veya hücrenin mevcut içeriğine bakmamız gerekir. Bu da bazı ithal dll kitaplıkları ile başarılabilir ve bilgisayar korsanlığı ile başa çıkabilir. Kesinlikle keşfetmeye değer.
Alain

-1

XLL nedir?

XLL, Excel veya Excel Eklenti Yöneticisi tarafından çağrılan çeşitli yordamları dışa aktaran bir DLL'dir. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

XLL'yi nasıl geliştirirsiniz?

Visual C ++ ile Excel XLL SDK (veya bir DLL'yi derleyip SDK prosedürlerini çağırabilen herhangi bir şey)

Basit bir XLL oluşturmak için hızlı bir kılavuzu nerede bulabilirim?

http://support.microsoft.com/kb/178474

Araç ipuçlarını nasıl edinebilirim?

  1. İşlevinizi bir prosedür olarak uygulayın ve dışa aktarın
  2. XlAutoOpen (void) prosedürünü uygulama ve dışa aktarma - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen'ın xlfRegister'ı çağırması yeterlidir - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Araç ipuçları için şunlara özel dikkat: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Ne yazık ki, Analiz Araç Paketi eklentisinin de araç ipuçları yok.

Çözümüm yanlıştı, ancak asıl gönderen tarafından yanlış bilgiler yayınlanmıştı. BINOMDIST ile bir resim gösteriliyorsa , bağlantısı açıkça bunun ANALYS32.xll'nin bir işlevi olmadığını gösteriyorsa.

Bu imkansız bir soruyu çözmeye çalıştığım anlamına geliyor. Çünkü posterin istediğini yapabilecek bir XLL yok. XLL'lerin araç ipuçlarını gösteren bir Excel sürümü bulursanız, lütfen bana bildirin.

Posterin ne sorduğu hakkında, XLL davranışını taklit etmeye çalışırken, eminim ki cevabım ANALYS32.xll'in yaptıklarına göre en doğru olanıydı.


3
Ne yazık ki, bir UDF'yi xlfRegister ile kaydetmek, Excel'in bu bilgiyi sayfa içi akıllı araç ipuçları olarak görüntülemesine neden olmaz . Burada kaydedilen açıklamalar vb. Yalnızca fx düğmesine bastığınızda açılan İşlev Bağımsız Değişkenleri iletişim kutusunda gösterilir. Ama asıl afişin sorduğu bu değil.
Govert

@Govert 2016'da hala böyle mi?
beppe9000

@ beppe9000 Evet. Excel-DNA IntelliSense uzantısını kullanarak UDF'ler
Govert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.