การเก็บรายการ ComboBox ไว้

ฉันได้สร้าง Word 2010 VBA Macro Sub ด้วย UserForm Sub ค้นหา ==Codes== ในเอกสารแบบฟอร์ม วาง ==code== ที่พบเป็นป้ายกำกับลงใน Userform จากนั้นอนุญาตให้ผู้ใช้แทนที่ ==code== ด้วยอินพุตของเขาหรือเธอใน Combobox ( เป็นส่วนหนึ่งของ UserForm เดียวกัน)

จากนั้นแต่ละสตริงของข้อมูลที่ป้อนจะถูกบันทึกลงในรายการ Combobox ใน UserForm เพื่อเลือกในภายหลังหากจำเป็น

วิธีนี้ใช้ได้ผลดีจนกว่ามาโคร/ฟอร์มผู้ใช้นี้จะหมดอายุเนื่องจากเอกสารที่ค้นหาเสร็จสมบูรณ์ (หรือถูกยกเลิก)

ฉันต้องการเปิดเอกสารแบบฟอร์มถัดไป และในการเปิดตัว Macro/Sub เดียวกันนี้ จะคงรายการข้อมูลคอมโบบ็อกซ์เดิมไว้ (เป็นตัวเลือกในการกรอกเอกสารที่เปิดถัดไปนี้ - ตัวอย่างเช่น รหัส ==ชื่อลูกค้า== จะปรากฏขึ้นบ่อยครั้ง และฉันควรจะเลือกรายการคอมโบบ็อกซ์ แทนที่จะต้องพิมพ์ชื่อลูกค้าซ้ำแล้วซ้ำเล่า)

แต่ดูเหมือนว่าฉันไม่สามารถเก็บรายการ Combobox ไว้ในการเปิดตัว Macro Sub ใหม่ที่มีข้อมูล Combobox ก่อนหน้านี้ได้ แม้ว่าฉันจะแยกรูทีนนี้เป็นโมดูลแยกต่างหากและกำหนดตัวแปรล่วงหน้าด้วยมิติข้อมูล "สาธารณะ"

ดังนั้นก่อนที่ฉันจะพยายามทำความเข้าใจเรื่องนี้ ... ก็แค่คำถามง่ายๆ:

เมื่อมาโครสิ้นสุดลงตัวแปรสาธารณะทั้งหมดจะ "หลุด" หรือไม่ เมื่อผมเคยเขียนโปรแกรมในมาโคร DOS WP.51 คุณสามารถเก็บสตริงข้อมูลไว้ใน RAM ได้อย่างไม่มีที่สิ้นสุด (จนกว่าคุณจะ "ฆ่า" มันหรือปิด WP)

หากตัวแปรสาธารณะไม่ได้ "ถูกทิ้ง" ใครก็ได้ให้ตัวอย่างโค้ดที่ตัวแปรสาธารณะสามารถเก็บไว้และเติมลงในฟอร์มผู้ใช้คอมโบบ็อกซ์ที่เปิดใช้งานซ้ำกันได้ไหม

ความคิดใดๆ ก็ตามสั้นๆ ก็สามารถช่วยได้

ขอบคุณมากล่วงหน้า . .

ไมค์


person Mike28    schedule 18.01.2016    source แหล่งที่มา
comment
เพียงเพื่อให้ได้แนวคิดที่ถูกต้อง ฉันคิดว่าคุณมี UserForm Macro นี้เก็บไว้ในเทมเพลต Normal หรือไม่ แล้วเมื่อคุณเปิดเอกสารแบบฟอร์มถัดไป คุณจะปิด Word แล้วเปิดใหม่อีกครั้ง?   -  person Jean-Pierre Oosthuizen    schedule 19.01.2016


คำตอบ (1)


ไม่แน่ใจว่าคุณกำลังพยายามทำอะไร แต่สิ่งที่ฉันแนะนำมีดังต่อไปนี้ (สมมติว่าแบบฟอร์มมีชื่อว่า "UserForm1" และ "UserForm2":

1) สร้างโมดูลที่คุณใช้เพื่อเปิดแบบฟอร์มโดยใช้:

Sub test()
    UserForm1.Show
    'Rest of things that you want to do...you will be able to access the values in your combobox in userform1
    UserForm2.Show
End Sub

2) ใน UserForm1 ของคุณ ให้รวมปุ่มที่จะปิดแบบฟอร์มและรวมรหัสต่อไปนี้:

Sub btn_Exit_Click()
    Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then
        Cancel = True
        MsgBox "The X is disabled, please use a button on the form.", vbCritical
    End If

End Sub

สิ่งนี้จะช่วยให้คุณสามารถรักษาการควบคุม UserForm และมั่นใจได้ว่าคุณสามารถเก็บค่าไว้ได้ อาจเป็นไปได้ที่จะปิดการใช้งานปุ่มปิด แต่ฉันไม่สามารถเข้าใจได้ (ประสบการณ์ของฉันกับแบบฟอร์มส่วนใหญ่อยู่ใน Access และเหล่านั้นมีคุณสมบัติที่แตกต่างกัน)

การซ่อนแบบฟอร์มจะเก็บค่าไว้เพื่อให้คุณสามารถดูได้ ในขณะที่เมื่อผู้ใช้ปิดแบบฟอร์ม คุณจะสูญเสียค่าที่อยู่ในนั้น

*หมายเหตุ: โค้ดสำหรับปิดใช้งานปุ่ม X ที่นำมาจาก VBA Express

person OpiesDad    schedule 19.01.2016
comment
ขอบคุณ OpieDad ไม่ นี่ไม่ใช่ประเด็น แต่ฉันพบว่าคุณปิดการใช้งานปุ่ม X มีประโยชน์มากอย่างไร ขอบคุณ. ไมค์ - person Mike28; 19.01.2016
comment
ฉันควรจะทดสอบสิ่งนั้น วิธีการที่ฉันให้ไว้ใช้ไม่ได้จริง ฉันจะแก้ไขเพื่อรวมสิ่งที่ทำ - person OpiesDad; 19.01.2016