การพัฒนาไลบรารี c# ที่ถูกเรียกจาก VBA

สวัสดี กระบวนการที่ฉันกำลังทำตอนนี้คือการสร้างฟังก์ชันใน VBA ดังนี้:

Sub TPS_Test()

    Dim classLib As Object
    ' remember you must type the set... line in its entirity when incrimenting to new version.  Something about their compiling
    
    Set classLib = New RoadTrip_v14_1_9.TripDoc
    classLib.TPS_Test Excel.ActiveWorkbook, False
    
End Sub

และเพิ่มไลบรารี C# จาก VBA - เครื่องมือ - การอ้างอิง (คอมไพล์ไลบรารีเป็นไลบรารีประเภทก่อน)

มันใช้งานได้ดี และฉันสามารถแนบไลบรารีเข้ากับกระบวนการ Excel.exe และแก้ไขข้อบกพร่องด้วยวิธีนั้นได้

อย่างไรก็ตาม มันเป็น PITA ที่บ่นเพราะทุกครั้งที่ฉันทำการเปลี่ยนแปลงโค้ด ฉันต้องคอมไพล์ใหม่ นำเข้าสู่ VBA ใหม่ และเรียกใช้อีกครั้ง ดังนั้นกระบวนการของฉันคือ:

  1. เพิ่มชื่อของโครงการ (Myproject_V1)
  2. รวบรวม
  3. ลบการอ้างอิงถึงไลบรารีเก่าใน VBA
  4. เพิ่มการอ้างอิงไปยังห้องสมุดใหม่
  5. เปลี่ยนชื่อคลาสใน VBA (set classLib = new Myproject_v1)
  6. แนบไลบรารี C# เข้ากับกระบวนการ Excel
  7. รันโมดูล VBA อีกครั้ง

ค่อนข้างละเอียดถี่ถ้วนและใช้เวลานาน

มีวิธีที่ดีกว่า?


person Rob    schedule 11.02.2021    source แหล่งที่มา
comment
หากคุณดำเนินการในลักษณะนั้น เปลี่ยนชื่อห้องสมุด คุณจะไม่มีทางเลือกอื่น ฉันเกรงว่า แต่การรักษาชื่อไว้ไม่เปลี่ยนแปลงและติดตามเวอร์ชันของแอปพลิเคชันในลักษณะที่แตกต่างออกไป ตามทฤษฎีแล้ว ไม่จำเป็นต้องใช้กระบวนการที่ซับซ้อนเช่นนี้ หากไลบรารีที่อ้างอิงสามารถพบได้ในเส้นทางเดียวกันตลอดเวลา   -  person FaneDuru    schedule 11.02.2021
comment
@FaneDuru คุณยังคงต้องผ่านขั้นตอนการแนบไลบรารีที่คอมไพล์ใหม่กับโครงการ VBA ใช่ไหม   -  person Rob    schedule 11.02.2021
comment
ผมคิดว่าไม่. ตามทฤษฎีแล้ว ระบบไม่สามารถทราบเนื้อหาของไลบรารีที่อ้างอิงได้ หากระบบใช้ชื่อเดียวกันและอยู่ในเส้นทางเดียวกัน คุณลองวิธีนี้หรือยัง? ฉันจะลองอ้างอิงจากโฟลเดอร์ 'Bin' ของโซลูชัน ฉันต้องสารภาพว่าฉันไม่ได้ทำอะไรที่คล้ายกันเพราะฉันไม่ต้องการอะไรแบบนี้ ฉันกำลังพูดอย่างเคร่งครัดตามทฤษฎี ...   -  person FaneDuru    schedule 11.02.2021
comment
คุณสามารถคอมไพล์ไลบรารีใหม่ได้โดยไม่ต้องเพิ่มใหม่ทุกครั้งใน VBA หากคุณไม่เปลี่ยนชื่อ ฉันทำสิ่งนี้ตลอดเวลา จากความคิดเห็นของคุณ คุณยังไม่ค้นพบประโยชน์ของการทดสอบหน่วย ค้นหา MSTest สำหรับ C # มันค่อนข้างใช้งานง่าย โดยพื้นฐานแล้ว คุณควรมีชุดการทดสอบในคลาส C# แยกกันในโปรเจ็กต์ที่สองในโซลูชันของคุณ ซึ่งใช้วิธีต่างๆ ที่ชั้นเรียนของคุณมีให้ เพื่อว่าเมื่อคุณไปถึง VBA คุณจะรู้ว่าคลาสนั้นทำงานอย่างที่ควรจะเป็น   -  person freeflow    schedule 11.02.2021


คำตอบ (1)


ขอขอบคุณผู้ตอบแบบสอบถาม วิธีที่ดีที่สุดในการทำเช่นนี้คือการสร้างการทดสอบหน่วยใน C# ที่จะโหลดไฟล์ Excel จากนั้นรันโค้ด C# กับมันใน Visual Studio

อย่างที่สองตามที่พวกเขาชี้ให้เห็น คุณสามารถใช้ชื่อไฟล์เดิมซ้ำได้ เพียงแค่ปิด Excel คอมไพล์ เปิด Excel

person Rob    schedule 18.02.2021