วิธีพิมพ์คลาสจากพจนานุกรม

Aug 26 2020

ฉันกำลังดำเนินการติดตั้งพจนานุกรมที่เก็บหลายค่าต่อคีย์ดังนั้นฉันจึงปรับรหัสที่พบในบทช่วยสอน / ตัวอย่างนี้ https://excelmacromastery.com/vba-dictionary/#Example_2_8211_Dealing_with_Multiple_Values

ฉันสร้างคลาสที่เรียกclsAI_Appด้วยรหัสต่อไปนี้:

Public ApplicationID As String
Public AIName As String
Public DoseApplied As Double

และในโมดูลของฉันใช้บิตต่อไปนี้:

For k = LBound(contents, 2) To UBound(contents, 2)
        Set oApplication = New clsAI_App
        oApplication.ApplicationID = Row & "-" & k
        oApplication.AIName = contents(1, k)
        oApplication.DoseApplied = contents(2, k) * wks_In.Cells(Row, 5)
        dict.Add oApplication.ApplicationID, oApplication
next k

ค่าจำนวนเต็มอยู่ที่ไหนRowและเป็นเมทริกซ์ของ (1,3) (1,5)kcontents()

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

Dim key As Variant
For Each key In dict.Keys
    Debug.Print key, dict(key) 
Next key

ฉันพบข้อผิดพลาด 438:

ออบเจ็กต์ไม่รองรับคุณสมบัติหรือเมธอดนี้

ซึ่งมีคำอธิบายที่กว้างเกินไป ดังนั้นฉันจึงสูญเสียสิ่งที่ฉันทำผิดที่นี่

คำตอบ

1 FaneDuru Aug 26 2020 at 16:57

ฉันไม่เห็นลิงก์ที่คุณโพสต์ แต่เนื่องจากคุณโหลดอ็อบเจ็กต์ ( oApplication) และDebug.Printส่งคืนสตริงคุณต้องปรับรหัสเพื่อส่งคืนคุณสมบัติคลาสสตริงหนึ่งรายการ ฉันจะพยายาม:

Debug.Print key, dict(key).DoseApplied...

หากชั้นเรียนที่กำลังสนทนามีคุณสมบัติดังกล่าวมากมายคุณสามารถดึงคุณสมบัติทั้งหมดออกมาได้

พจนานุกรมเป็นเครื่องมือที่ทรงพลังสามารถเก็บตัวแปรวัตถุหรือแม้แต่ฟังก์ชัน ...