Nhiệm vụ cho chú giải công cụ hàm tùy chỉnh Excel


100

Câu hỏi này đã được hỏi trước đây , nhưng mỗi lần câu trả lời được chấp nhận chỉ đơn giản là từ chức để cung cấp mô tả chức năng sử dụng Application.MacroOptions( VBA6 ) ( VBA7 ), nhưng thông tin này không thực sự xuất hiện dưới dạng chú giải công cụ, vì vậy nó không giải quyết được vấn đề của tôi.

Mục đích

Điều mà tất cả chúng ta mong muốn là có thể xác định các chức năng tùy chỉnh bằng bất kỳ phương tiện nào (bổ trợ VBA, VSTO hoặc COM) và cung cấp cho người dùng lợi ích của mô tả cửa sổ bật lên / mẹo công cụ về chức năng và các tham số của nó, như xuất hiện cho mọi hàm Excel tích hợp sẵn, nội dòng hoặc trong thanh công thức:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Câu trả lời được chấp nhận rộng rãi cho nhu cầu này là không thể có các chức năng tùy chỉnh, nhưng tôi muốn thử thách niềm tin đó.

Vấn đề

Hiện tại, điều tốt nhất mà tôi từng thấy mọi người làm là xác định các hàm (thường sử dụng lệnh gọi MacroOptions ở trên) để khi hiển thị hộp thoại hàm (nút fx trong thanh công thức) các mô tả hàm và tham số của chúng xuất hiện như bên dưới:

nhập mô tả hình ảnh ở đây

Như bạn thấy, đây là một hàm phức tạp với nhiều tham số. Nếu người dùng không biết về hộp thoại "đối số hàm" này và cách đưa nó lên, và thay vào đó chỉ quen thuộc với chú giải công cụ tiêu chuẩn của Excel, họ sẽ chỉ thấy tên công thức và không có thêm trợ giúp nào:

nhập mô tả hình ảnh ở đây

Mà họ không có cơ hội cung cấp chính xác các thông số cần thiết. (Tất nhiên, nếu không đọc tài liệu thì không người dùng nào làm được.)

Giờ đây, người dùng thành thạo có thể biết rằng bằng cách gõ Ctrl+ Shift+ A, họ sẽ được cấp một danh sách tự động hoàn thành các tham số chức năng như sau:

nhập mô tả hình ảnh ở đây

Nhưng tất nhiên, chúng ta có cùng một vấn đề như trên đó là người dùng excel tiêu chuẩn sẽ chỉ quen với hành vi mặc định từ hình ảnh đầu tiên và có thể sẽ không bao giờ học được tính năng đó.

Đến thời điểm này cần phải rõ lý do tại sao điều này là không đủ và chúng tôi muốn những gì mà mọi chức năng tích hợp sẵn có - mẹo công cụ nội tuyến cho người dùng biết cách sử dụng chức năng.

Trêu chọc

Lúc đầu, tôi có thể đã bị thuyết phục rằng điều này đơn giản là không thể ngoại trừ các hàm ứng dụng Excel gốc. Bổ trợ và VBA là các tính năng mở rộng và mẹo công cụ này có thể đơn giản là không thể mở rộng. Nhưng lý thuyết đó bị thách thức bởi sự tồn tại của tiện ích bổ trợ Analysis Toolpak. Chắc chắn, nó được tích hợp trong Microsoft, nhưng ANALYS32.xll là một add-in XLL độc lập giống như những add-in có thể được tạo bằng VB, C, C ++ và C #. Chắc chắn rồi, khi XLL này được tải vào ứng dụng, các hàm mà nó cung cấp có cùng các mẹo công cụ của các hàm excel gốc:

nhập mô tả hình ảnh ở đây

Chắc chắn nếu thông tin này bằng cách nào đó được mã hóa trong tệp XLL này và được chuyển sang Excel, thì có cách nào để sao chép nó với Phần bổ trợ của riêng chúng tôi? Bây giờ tôi sẽ bắt đầu tự học một chút về dịch ngược và xem liệu tôi có thể thiết kế ngược lại bất cứ điều gì đang diễn ra trong toolpak phân tích hay không.

Cách bạn có thể giúp

Tôi gần như chắc chắn rằng tôi đã nghiên cứu tất cả các thông tin công khai về vấn đề này. Tuy nhiên, nếu ai đó biết điều gì đó mà tôi không biết có thể giúp ích cho việc này, hãy thoải mái tham gia. Tôi rất không quen với dlls / xlls được biên dịch theo kỹ thuật ngược, vì vậy nếu ai đó muốn mở bản sao cục bộ của họ của Analysis32.xll và tìm ra những gì đang xảy ra với các định nghĩa chức năng tùy chỉnh của nó, tôi sẽ rất có nghĩa vụ. Nếu không, tôi sẽ tiếp tục tự mình đào sâu vào điều này cho đến khi tôi đi đến tất cả các ngõ cụt và báo cáo lại những gì tôi tìm thấy.


4
Không thể tạo hoặc hiển thị chú giải công cụ cho các đối số UDF trong các phiên bản Excel hiện tại bằng bất kỳ công nghệ hiện có nào. Nguồn của MVP: answers.microsoft.com/en-us/office/forum/office_2007-customize/…
silkfire

.NET Reflector không thể mở ANALYS32.xll, kết luận rằng nó không phải là .NET Assembly. Điều này làm tôi ngạc nhiên. Có vẻ như tôi sẽ phải cố gắng dịch ngược nó sang hợp ngữ?
Alain

5
Nghe có vẻ thú vị, nhưng trước đây tôi (office 97) đã đưa ra các chú giải công cụ bằng cách sử dụng winapi. Và theo cách đó bạn có thể làm được. Nếu điều đó thú vị, tôi có thể tìm hiểu thông tin và cố gắng tạo ra một máy móc từ nó.
Archlight

1
Tôi cũng sẽ hiểu bạn, sẽ mất một thời gian để đào lên điều này. Nhưng nó sẽ được đưa lên đây để người khác sử dụng. Sự kết hợp thấp và độc ác của nó gồm winapi / vba / và tôi nghĩ rằng tôi đã đặt nó dưới dạng vb.dll nhưng không có sự cố nào nâng nó lên .net
Archlight

1
Rõ ràng nhóm phát triển Excel đang lấy phiếu bầu cho tính năng này tại đây: excel.uservoice.com/forums/…
Alain

Câu trả lời:


40

Tôi đã đăng một dự án bằng chứng về khái niệm lên GitHub dưới dạng dự án Excel-DNA IntelliSense , đang thực hiện điều này.

Sử dụng các lớp Tự động hóa giao diện người dùng để theo dõi các sự kiện giao diện người dùng Excel thích hợp, một biểu mẫu được hiển thị khi thích hợp.

Mã được bao bọc dưới dạng bổ trợ Excel-DNA và hoạt động trên máy Excel 2013 / Windows 8 của tôi. Tôi đã thử nghiệm trên một cấu hình khác (64-bit Excel 2010 trên Windows Server 2008) và gặp sự cố nghiêm trọng.

Đối với một hàm C # được xác định bằng các thuộc tính Excel-DNA như sau:

[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;
}

chúng tôi nhận được cả mô tả chức năng

Mô tả chức năng

và khi chọn hàm, chúng tôi nhận được trợ giúp về đối số

Trợ giúp Lập luận

Điều đó trông đẹp, nhưng tất cả vẫn rất lỏng lẻo, chỉ hoạt động trên máy của tôi và đôi khi làm hỏng Excel. Nó có thể là một khởi đầu, mặc dù ...


Cập nhật ngày 9 tháng 5 năm 2014:

Tôi đã đạt được một số tiến bộ trong việc tìm ra cách làm cho đối số giúp hoạt động trong các phiên bản Excel và Windows cũ hơn. Tuy nhiên, nó vẫn cần khá nhiều công việc để có được mọi thứ đáng tin cậy. Bất cứ ai muốn giúp đỡ về việc này xin vui lòng liên hệ trực tiếp với tôi.


Cập nhật ngày 18 tháng 6 năm 2016:

Hỗ trợ Excel UDF IntelliSense cho cả bổ trợ Excel-DNA và chức năng VBA hiện đang được thử nghiệm. Xem trang Bắt đầu trên GitHub để biết hướng dẫn.


Đáng buồn thay, có vẻ như Excel 2013 hoặc Windows 8 hoặc cả hai đều được yêu cầu cho hỗ trợ Giao diện người dùng tự động hóa TextRange mà đối số trợ giúp sử dụng. Tôi rất muốn nghe từ bất cứ ai có một số kinh nghiệm của Windows UI Automation ...
Govert

Bạn có cố gắng tham khảo các cụm Excel cũ hơn trước khi biên dịch sang các máy cũ hơn không?
Daniel Möller

1
Tham chiếu đến mô hình đối tượng Excel không thực sự liên quan đến điều này. Nhưng cũng có những phiên bản giao diện người dùng tự động chắc chắn khác nhau mà có thể ảnh hưởng đến mọi thứ ...
Govert

1
Đây là những con đường đi trước bất cứ thứ gì ngoài kia cho đến nay, vì vậy bạn sẽ nhận được phiếu bầu của tôi cho tiền thưởng. Tôi dự định xem liệu tôi có thể đóng góp cho giải pháp này trong tương lai gần hay không, vì vậy hãy theo dõi yêu cầu kéo của tôi!
Alain

@Alain Làm tốt lắm Govert! & Alain, tôi rất muốn thấy bạn thành thạo điều này.
CodeCamper

1

Làm thế nào về

  1. Chụp văn bản nhập trên sự kiện nhấn phím của ô. như thế này
  2. Kiểm tra xem văn bản có khớp với các chức năng tùy chỉnh hay không.
  3. Nếu khớp, sau đó hiển thị một cái gì đó như nhãn hoặc hình dạng để giả vờ là một chú giải công cụ. như thế này

điều này có chấp nhận được không?

Nó là một chút xấu xí nhưng dễ dàng hơn.


Đây là một điểm khởi đầu thú vị mà tôi đã cân nhắc, nhưng gặp phải rắc rối khi gặp phải các hình thức chỉnh sửa công thức nâng cao hơn (chẳng hạn như nhấp vào một nơi nào đó ở giữa và xóa / thêm ký tự hoặc đánh dấu và ghi đè một phần của công thức hoặc sử dụng một công thức tùy chỉnh ở giữa một số công thức khác.) Những công thức này đòi hỏi nhiều hơn là kiểm tra các lần nhấn phím, chúng tôi cần xem xét nội dung hiện tại của thanh công thức hoặc ô trong quá trình chỉnh sửa. Điều này cũng có thể được thực hiện với một số thư viện dll đã nhập và xử lý việc nhận hack. Chắc chắn đáng để khám phá.
Alain

-1

XLL là gì?

XLL là một DLL xuất một số thủ tục được gọi bởi Excel hoặc Trình quản lý bổ trợ Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

Bạn phát triển XLL như thế nào?

Excel XLL SDK với Visual C ++ (hoặc bất kỳ thứ gì có thể biên dịch DLL và gọi các thủ tục SDK)

Tôi có thể tìm hướng dẫn nhanh để tạo XLL đơn giản ở đâu?

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

Làm cách nào để nhận chú giải công cụ?

  1. Thực hiện chức năng của bạn như một thủ tục và xuất nó
  2. Thực hiện và xuất quy trình xlAutoOpen (void) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen chỉ cần gọi xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Đối với các chú giải công cụ, đặc biệt chú ý: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Đáng buồn thay, phần bổ trợ Analysis Toolpak cũng không có chú giải công cụ.

Giải pháp của tôi đã sai, nhưng với thông tin sai được đăng bởi người đăng ban đầu. Hiển thị một bức ảnh với BINOMDIST, nếu liên kết của anh ấy cho thấy rõ ràng rằng đây không phải là chức năng của ANALYS32.xll.

Điều này có nghĩa là tôi đang cố gắng giải một câu hỏi bất khả thi. Vì không có XLL nào có thể làm được những gì mà người đăng yêu cầu. Nếu bạn tìm thấy phiên bản Excel hiển thị chú giải công cụ của XLL, vui lòng cho tôi biết.

Về những gì người đăng đã hỏi, cố gắng bắt chước hành vi XLL, tôi chắc chắn câu trả lời của tôi là đúng nhất liên quan đến những gì ANALYS32.xll làm.


3
Đáng buồn thay, việc đăng ký UDF với xlfRegister không khiến Excel hiển thị thông tin đó dưới dạng chú giải công cụ intellisense trong trang tính. Các mô tả, v.v. đã đăng ký ở đó chỉ được hiển thị trong hộp thoại Đối số Hàm, hộp thoại này bật lên khi bạn nhấn nút fx. Nhưng đó không phải là điều mà người đăng ban đầu đang hỏi.
Govert vào

@Govert bây giờ vẫn như vậy vào năm 2016 phải không?
beppe9000

@ beppe9000 Có. Bạn có thể nhận được chú giải công cụ IntelliSense trong trang tính cho UDF (được định nghĩa trong XLL hoặc VBA) bằng cách sử dụng tiện ích mở rộng Excel-DNA IntelliSense: github.com/Excel-DNA/IntelliSense
Govert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.