จะใช้ค่าในกล่องรายการใน VBA ได้อย่างไร

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

Private Sub ListBox1_Click()
    Dim iCnt As Long
    Dim name As Variant

    For iCnt = 0 To Me.ListBox1.ListCount - 1
        If ListBox1.Selected(iCnt) = True Then
            name = Me.ListBox1.List(iCnt)
            ThisWorksheet.Sheets("Program").Range("K6").Value = name
        End If
        'subsequent match and populate will go here.

End Sub

ฉันจะแก้ไขไวยากรณ์ให้ส่งคืนค่าสตริงของรายการที่เลือกได้อย่างไร เพื่อที่ฉันจะได้ใช้สำหรับการจับคู่ครั้งต่อไปได้


person Poppenhoffer    schedule 14.10.2019    source แหล่งที่มา
comment
Next iCntของคุณอยู่ที่ไหน?   -  person Tom    schedule 14.10.2019
comment
บทแนะนำนี้จะช่วยให้คุณเริ่มต้นได้   -  person Storax    schedule 14.10.2019
comment
ขออภัย ฉันสับมันเล็กน้อย ฉันมี Nexts และ End Ifs ทั้งหมดอยู่ในนั้น แค่มีรหัสผิด โพสคำตอบไว้ด้านล่างครับ ไม่ต้องการ For loop ด้วยซ้ำ แค่ใช้คำสั่งที่เหมาะสม   -  person Poppenhoffer    schedule 14.10.2019
comment
คำแนะนำบางประการ: 1) ThisWorksheet.Sheets("Program")…. ไม่ถูกต้องและจะทำให้เกิดข้อความแสดงข้อผิดพลาด ควรเป็น: ThisWorkBook.Worksheets("(Program")... หรืออ้างอิงถึง .CodeName ของชีต 2) .List ต้องใช้การอ้างอิงแบบ 2 มิติ รวมถึงแถวที่ใช้ 0 บวกด้วยดัชนีคอลัมน์ ไม่ใช่แค่ (ListBox1.List(iCnt), 3) คุณไม่จำเป็นต้องวนซ้ำไปยังรายการกล่องรายการทั้งหมดเพื่อรับ ListBox1.ListIndex แบบอิงศูนย์จริง, 4) หลีกเลี่ยงการล้างข้อมูลตัวแปร name กล่าวคือ อย่าโอเวอร์โหลดชื่อเมธอดหรือฟังก์ชันที่มีอยู่ซึ่งคุณอาจประสบปัญหาได้   -  person T.M.    schedule 14.10.2019


คำตอบ (1)


name = Me.ListBox1.Value

นี่คือรหัสที่ถูกต้อง

person Poppenhoffer    schedule 14.10.2019