การค้นหาคำแนะนำเครื่องมือฟังก์ชันที่กำหนดเองของ Excel


101

เคยถาม คำถามนี้มาก่อนแต่ทุกครั้งที่ได้รับคำตอบเป็นเพียงการลาออกเพื่อให้คำอธิบายฟังก์ชันโดยใช้Application.MacroOptions( VBA6 ) ( VBA7 ) แต่ข้อมูลนี้ไม่ได้ปรากฏเป็นคำแนะนำเครื่องมือดังนั้นจึงไม่สามารถแก้ปัญหาของฉันได้

เป้าหมาย

สิ่งที่เราทุกคนปรารถนาคือสามารถกำหนดฟังก์ชันที่กำหนดเองได้ด้วยวิธีการใด ๆ (VBA, VSTO หรือ COM add-in) และให้ประโยชน์แก่ผู้ใช้จากคำอธิบายป๊อปอัป / คำแนะนำเครื่องมือของฟังก์ชันและพารามิเตอร์ดังที่ ปรากฏขึ้นสำหรับทุกฟังก์ชัน Excel ในตัวไม่ว่าจะเป็นแบบอินไลน์หรือในแถบสูตร:

ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่

คำตอบที่ได้รับการยอมรับอย่างกว้างขวางสำหรับความต้องการนี้คือไม่สามารถใช้ฟังก์ชันแบบกำหนดเองได้ แต่ฉันต้องการท้าทายความเชื่อนั้น

ปัญหา

ปัจจุบันสิ่งที่ดีที่สุดที่ฉันเคยเห็นใคร ๆ ทำคือการกำหนดฟังก์ชัน (มักใช้การเรียก MacroOptions ด้านบน) ดังนั้นเมื่อเปิดกล่องโต้ตอบฟังก์ชัน (ปุ่ม fx ในแถบสูตร) ​​คำอธิบายฟังก์ชันและพารามิเตอร์จะปรากฏดังต่อไปนี้:

ป้อนคำอธิบายภาพที่นี่

อย่างที่คุณเห็นนี่เป็นฟังก์ชันที่ซับซ้อนซึ่งมีพารามิเตอร์มากมาย หากผู้ใช้ไม่ทราบถึงบทสนทนา "function arguments" และวิธีนำมาใช้และแทนที่จะคุ้นเคยกับ tooltip มาตรฐานของ Excel แต่จะเห็นเฉพาะชื่อสูตรและไม่มีความช่วยเหลือเพิ่มเติม:

ป้อนคำอธิบายภาพที่นี่

ซึ่งพวกเขาไม่มีโอกาสที่จะระบุพารามิเตอร์ที่ต้องการได้อย่างถูกต้อง (โดยไม่อ่านเอกสารซึ่งแน่นอนว่าไม่มีผู้ใช้คนใดเคยทำ)

ตอนนี้ผู้ใช้ระดับสูงอาจรู้แล้วว่าด้วยการพิมพ์Ctrl+ Shift+ Aพวกเขาจะได้รับรายการพารามิเตอร์ฟังก์ชันที่กรอกอัตโนมัติดังนี้:

ป้อนคำอธิบายภาพที่นี่

แต่แน่นอนว่าเรามีปัญหาเดียวกันกับข้างบนนั่นคือผู้ใช้ excel มาตรฐานจะใช้กับพฤติกรรมเริ่มต้นจากภาพแรกเท่านั้นและอาจจะไม่เคยเรียนรู้คุณลักษณะนั้นมาก่อน

ในจุดนี้ควรชัดเจนว่าเหตุใดจึงไม่เพียงพอและเราต้องการให้ทุกฟังก์ชันในตัวมีคำแนะนำเครื่องมือในบรรทัดที่บอกผู้ใช้ว่าจะใช้ฟังก์ชันนี้อย่างไร

แซว

ในตอนแรกฉันอาจมั่นใจว่าสิ่งนี้ไม่สามารถทำได้ยกเว้นด้วยฟังก์ชันแอปพลิเคชัน Excel ดั้งเดิม Add-in และ VBA เป็นคุณสมบัติความสามารถในการขยายและคำแนะนำเครื่องมือนี้อาจไม่สามารถขยายได้ แต่ทฤษฎีนั้นถูกท้าทายโดยการมีอยู่ของ Add-in Analysis Toolpak แน่นอนว่ามันสร้างขึ้นใน Microsoft แต่ ANALYS32.xll เป็นส่วนเสริม XLL แบบสแตนด์อโลนเช่นเดียวกับที่สามารถผลิตใน VB, C, C ++ และ C # แน่นอนว่าเมื่อโหลด XLL นี้ลงในแอปพลิเคชันแล้วฟังก์ชันที่ทำให้พร้อมใช้งานจะมีเคล็ดลับเครื่องมือเดียวกันของฟังก์ชัน excel ดั้งเดิม:

ป้อนคำอธิบายภาพที่นี่

แน่นอนว่าหากข้อมูลนี้ถูกเข้ารหัสในไฟล์ XLL นี้และส่งต่อไปยัง Excel มีวิธีในการจำลองข้อมูลด้วย Add-in ของเราเองหรือไม่? ตอนนี้ฉันมาถึงจุดที่ฉันจะเริ่มสอนตัวเองเล็กน้อยเกี่ยวกับการแยกคอมไพล์และดูว่าฉันสามารถทำวิศวกรรมย้อนกลับสิ่งที่เกิดขึ้นใน toolpak การวิเคราะห์ได้หรือไม่

คุณจะช่วยได้อย่างไร

ฉันเกือบจะแน่ใจว่าฉันได้ค้นคว้าข้อมูลที่เปิดเผยต่อสาธารณะทั้งหมดเกี่ยวกับปัญหานี้แล้ว หากมีคนรู้บางสิ่งที่ฉันไม่รู้ซึ่งอาจช่วยได้ แต่อย่าลังเลที่จะตีระฆังฉันไม่คุ้นเคยกับ dlls / xlls ที่คอมไพล์วิศวกรรมย้อนกลับดังนั้นหากมีใครรู้สึกอยากเปิดสำเนา Analysis32.xll ในเครื่องและ เมื่อคิดว่าเกิดอะไรขึ้นกับคำจำกัดความของฟังก์ชันที่กำหนดเองฉันจะต้องรับผิดชอบมาก ไม่อย่างนั้นฉันจะขุดคุ้ยเรื่องนี้ต่อไปจนกว่าฉันจะเจอทางตันทั้งหมดและกลับมารายงานสิ่งที่ฉันพบ


4
ไม่สามารถสร้างหรือแสดงคำแนะนำเครื่องมือสำหรับอาร์กิวเมนต์ UDF ใน Excel เวอร์ชันปัจจุบันโดยใช้เทคโนโลยีที่มีอยู่ ที่มาโดย MVP: answers.microsoft.com/en-us/office/forum/office_2007-customize/…
silkfire

.NET Reflector ไม่สามารถเปิด ANALYS32.xll โดยสรุปว่าไม่ใช่. NET Assembly สิ่งนี้ทำให้ฉันประหลาดใจ ดูเหมือนว่าฉันจะต้องพยายามถอดรหัสเป็นภาษาแอสเซมบลี?
Alain

5
ฟังดูน่าสนใจ แต่ในอดีต (office 97) ได้ทำคำแนะนำเครื่องมือที่ใช้ winapi และด้วยวิธีนั้นคุณสามารถทำได้ หากสิ่งนั้นน่าสนใจฉันสามารถขุดข้อมูลและพยายามหาข้อมูลจากมัน
Archlight

1
ฉันจะได้รับมันเหมือนกันคุณต้องใช้เวลาพอสมควรในการขุดสิ่งนี้ แต่มันควรจะขึ้นที่นี่เพื่อให้คนอื่นใช้ คำสั่งผสมที่ต่ำและชั่วร้ายของ winapi / vba / และฉันคิดว่าฉันทำให้มันเป็น vb.dll แต่ไม่มีแนวโน้มที่จะยกมันขึ้นเป็น. net
Archlight

1
เห็นได้ชัดว่าทีมพัฒนา Excel กำลังโหวตฟีเจอร์นี้ที่นี่: excel.uservoice.com/forums/…
Alain

คำตอบ:


40

ฉันได้โพสต์โครงการพิสูจน์แนวคิดไปยัง GitHub เป็นโครงการExcel-DNA IntelliSenseโดยนำสิ่งนี้ไปใช้

การใช้คลาส UI Automation เพื่อตรวจสอบเหตุการณ์อินเทอร์เฟซผู้ใช้ Excel ที่เหมาะสมฟอร์มจะแสดงตามความเหมาะสม

รหัสถูกห่อเป็นAdd-in ของExcel-DNAและทำงานบนเครื่อง Excel 2013 / Windows 8 ของฉัน ฉันได้ทดสอบการกำหนดค่าอื่น ๆ (64 บิต Excel 2010 บน Windows Server 2008) และมีปัญหาร้ายแรง

สำหรับฟังก์ชัน C # ที่กำหนดด้วยแอตทริบิวต์ของ Excel-DNA ดังนี้:

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

เราได้ทั้งคำอธิบายฟังก์ชัน

คำอธิบายฟังก์ชัน

และเมื่อเลือกฟังก์ชันเราจะได้รับความช่วยเหลือเกี่ยวกับอาร์กิวเมนต์

ความช่วยเหลือในการโต้แย้ง

ดูดี แต่ทุกอย่างยังคงเป็นขุยใช้งานได้เฉพาะบนเครื่องของฉันและบางครั้งก็ขัดข้องใน Excel มันอาจจะเป็นการเริ่มต้น แต่ ...


อัปเดต 9 พฤษภาคม 2557:

ฉันได้มีความคืบหน้าในการหาวิธีทำให้อาร์กิวเมนต์ช่วยทำงานภายใต้ Excel และ Windows เวอร์ชันเก่า อย่างไรก็ตามยังต้องทำงานอีกมากเพื่อให้ทุกอย่างเชื่อถือได้ ใครก็ตามที่ต้องการความช่วยเหลือในเรื่องนี้โปรดติดต่อฉันโดยตรง


อัปเดต 18 มิถุนายน 2559:

ขณะนี้การสนับสนุน Excel UDF IntelliSense สำหรับทั้ง Add-in ของ Excel-DNA และฟังก์ชัน VBA กำลังอยู่ระหว่างการทดสอบ ดูหน้าเริ่มต้นใช้งานบน GitHub สำหรับคำแนะนำ


น่าเศร้าที่ดูเหมือนว่า Excel 2013 หรือ Windows 8 หรือทั้งสองอย่างจำเป็นสำหรับการสนับสนุน UI Automation TextRange ที่อาร์กิวเมนต์ช่วยใช้ ฉันชอบที่จะได้ยินจากทุกคนที่มีประสบการณ์ Windows UI Automation ...
Govert

คุณพยายามอ้างอิงชุดประกอบ Excel รุ่นเก่าก่อนที่จะรวบรวมกับเครื่องรุ่นเก่าหรือไม่?
Daniel Möller

1
การอ้างอิงถึงโมเดลออบเจ็กต์ Excel ไม่ได้เกี่ยวข้องกับสิ่งนี้จริงๆ แต่มีเวอร์ชัน UI Automation ที่แตกต่างกันอย่างแน่นอนซึ่งอาจส่งผลกระทบต่อสิ่งต่างๆ ...
Govert

1
นี่คือถนนข้างหน้าของทุกสิ่งที่นั่นดังนั้นคุณจะได้รับการโหวตจากฉันสำหรับค่าหัว ฉันตั้งใจจะดูว่าฉันสามารถมีส่วนร่วมในการแก้ปัญหานี้ได้หรือไม่ในอนาคตอันใกล้นี้ดังนั้นโปรดติดตามคำขอดึงของฉัน!
Alain

@ Alain Good job to Govert! & Alain ฉันอยากเห็นคุณเชี่ยวชาญเรื่องนี้
CodeCamper

1

เกี่ยวกับ

  1. จับภาพการป้อนข้อความในเหตุการณ์การกดแป้นของเซลล์ แบบนี้
  2. ตรวจสอบว่าข้อความตรงกับฟังก์ชันที่กำหนดเองหรือไม่
  3. หากตรงกันให้แสดงบางอย่างเช่นป้ายชื่อหรือรูปร่างเพื่อแสร้งทำเป็นคำแนะนำเครื่องมือ แบบนี้

เป็นที่ยอมรับหรือไม่?

มันน่าเกลียดเล็กน้อย แต่ง่ายกว่า


นี่เป็นจุดเริ่มต้นที่น่าสนใจที่ฉันพิจารณา แต่พบปัญหาแทรกซ้อนเมื่อพบรูปแบบขั้นสูงในการแก้ไขสูตร (เช่นคลิกตรงกลางแล้วลบ / เพิ่มอักขระหรือไฮไลต์และเขียนทับบางส่วนของสูตรหรือใช้ สูตรที่กำหนดเองอยู่ตรงกลางของสูตรอื่น ๆ ) สิ่งเหล่านี้ต้องการมากกว่าการตรวจสอบการกดแป้นเราจำเป็นต้องดูเนื้อหาปัจจุบันของแถบสูตรหรือเซลล์ในช่วงกลางการแก้ไข สิ่งนี้อาจทำได้ด้วยไลบรารี dll ที่นำเข้าและจัดการกับการแฮ็กเกอร์ คุ้มค่ากับการสำรวจอย่างแน่นอน
Alain

-1

XLL คืออะไร?

XLL คือ DLL ที่เอ็กซ์พอร์ตโพรซีเดอร์ต่างๆที่เรียกโดย Excel หรือ Excel Add-in Manager http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

คุณพัฒนา XLL ได้อย่างไร?

Excel XLL SDK พร้อม Visual C ++ (หรืออะไรก็ได้ที่สามารถคอมไพล์ DLL และเรียกโพรซีเดอร์ SDK)

ฉันจะหาคำแนะนำโดยย่อสำหรับการสร้าง XLL แบบง่ายได้ที่ไหน

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

ฉันจะรับคำแนะนำเครื่องมือได้อย่างไร

  1. ใช้ฟังก์ชันของคุณเป็นขั้นตอนและส่งออก
  2. ใช้งานและเอ็กซ์พอร์ตขั้นตอน xlAutoOpen (โมฆะ) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen เพียงต้องการเรียกใช้ xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. สำหรับคำแนะนำเครื่องมือข้อควรระวังเป็นพิเศษสำหรับ: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

น่าเสียดายที่ส่วนเสริม Analysis Toolpak ไม่มีคำแนะนำเครื่องมือเช่นกัน

วิธีแก้ปัญหาของฉันผิด แต่มีข้อมูลที่ไม่ถูกต้องโพสต์โดยผู้โพสต์ต้นฉบับ การแสดงรูปภาพด้วย BINOMDIST หากลิงก์ของเขาแสดงให้เห็นอย่างชัดเจนว่านี่ไม่ใช่ฟังก์ชันของ ANALYS32.xll

ซึ่งหมายความว่าฉันกำลังพยายามแก้ไขคำถามที่เป็นไปไม่ได้ เนื่องจากไม่มี XLL ที่สามารถทำตามที่ผู้โพสต์ร้องขอได้ หากคุณพบ Excel เวอร์ชันที่แสดงคำแนะนำเครื่องมือของ XLL โปรดแจ้งให้เราทราบ

เกี่ยวกับสิ่งที่ผู้โพสต์ถามพยายามเลียนแบบพฤติกรรม XLL ฉันแน่ใจว่าคำตอบของฉันถูกต้องที่สุดเมื่อเทียบกับสิ่งที่ ANALYS32.xll ทำ


3
น่าเศร้าที่การลงทะเบียน UDF ด้วย xlfRegister ไม่ได้ทำให้ Excel แสดงข้อมูลนั้นเป็นคำแนะนำเครื่องมือ intellisense ในแผ่นงาน คำอธิบาย ฯลฯ ที่ลงทะเบียนจะแสดงเฉพาะในกล่องโต้ตอบอาร์กิวเมนต์ของฟังก์ชันซึ่งจะปรากฏขึ้นเมื่อคุณกดปุ่ม fx แต่นั่นไม่ใช่สิ่งที่ผู้โพสต์ต้นฉบับถามถึง
Govert

@Govert ตอนนี้ยังเป็นแบบนี้อยู่หรือเปล่าในปี 2559
beppe9000

@ beppe9000 ครับ คุณสามารถรับคำแนะนำเครื่องมือ IntelliSense ในแผ่นงานสำหรับ UDF (กำหนดใน XLL หรือ VBA) โดยใช้ส่วนขยาย Excel-DNA IntelliSense: github.com/Excel-DNA/IntelliSense
Govert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.