VBA ใช้อาร์เรย์เพื่อหลีกเลี่ยงค่าการเข้ารหัสฮาร์ดเพื่อเรียกมาโครที่แตกต่างกัน


1

ฉันมีค่าในคอลัมน์ D ของแผ่นงาน (Sheet2) ในเวิร์กบุ๊กที่มีค่าที่ได้มาจากสูตรเพื่อให้ได้เพียงส่วนสุดท้ายของค่าที่ยาวกว่าในเซลล์คอลัมน์ C ค่าที่มากกว่านั้นจะถูกป้อนโดยอัตโนมัติในคอลัมน์ C ผ่านการดับเบิลคลิก บนแผ่นงานแยกต่างหาก (Sheet5) ฉันมีรายการค่าในคอลัมน์ C ของแผ่นงานนั้น หากค่าใด ๆ ในคอลัมน์ D ของ Sheet2 เท่ากับค่าใด ๆ ในคอลัมน์ C ของ Sheet5 ฉันต้องการเซลล์ในคอลัมน์ F ของ Sheet2 เพื่อเปลี่ยนเป็นสีแดง เมื่อเซลล์คอลัมน์ F ใน Sheet2 เป็นสีแดงขึ้นอยู่กับค่าในคอลัมน์ D ฉันต้องการให้เซลล์สีแดงสามารถคลิกได้ซึ่งจะนำผู้ใช้ไปยังชีตอื่นที่แสดงรายการค่าอ้างอิงที่สัมพันธ์กับค่าในคอลัมน์ D รหัสด้านล่าง ทำแค่นั้น

   Private Sub Worksheet_Change(ByVal Target As Range)

    Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446"))
    Dim CellF As Range, CellD As Range, Cell As Range

    If Not Application.Intersect(c, Range(Target.Address)) Is Nothing Then

        Set CellF = Range("F" & Target.Row)
        Set CellD = Range("D" & Target.Row)

        If CellF.Value <> "" And getMacroDictionary.Exists(CellD.Text) Then
            CellF.Interior.ColorIndex = 3
        Else
            CellF.Interior.ColorIndex = 0
        End If
    End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim key As String, dic As Object
    Set sourceRange = Nothing
    If Target.Column = 6 And Target.Cells.Count = 1 And Target.Interior.ColorIndex = 3 Then
        Set sourceRange = Target
        Set dic = getMacroDictionary
        key = Target.Offset(0, -2).Value2
        If dic.Exists(key) Then Application.Run dic(key)
    End If

End Sub

Function getMacroDictionary() As Object
    Dim dic As Object
    Set dic = CreateObject("SCripting.Dictionary")
    dic.Add "1000GP", "gotoref1"
    dic.Add "1000MM", "gotoref2"
    dic.Add "19FEST", "gotoref3"
    dic.Add "20IEDU", "gotoref4"
    dic.Add "20ONLC", "gotoref5"
    dic.Add "20PART", "gotoref6"
    dic.Add "20PRDV", "gotoref7"
    dic.Add "20SPPR", "gotoref8"
    dic.Add "22DANC", "gotoref9"
    dic.Add "22LFLC", "gotoref10"
    dic.Add "22MEDA", "gotoref11"
    dic.Add "530CCH", "gotoref12"
    dic.Add "60PUBL", "gotoref13"
    dic.Add "74GA01", "gotoref14"
    dic.Add "74GA17", "gotoref15"
    dic.Add "74GA99", "gotoref16"
    dic.Add "78REDV", "gotoref17"
    Set getMacroDictionary = dic
End Function

ฉันคิดว่าวิธีที่ดีที่สุดในการหลีกเลี่ยงการเขียนโค้ดแบบยากคือการสร้างอาเรย์ ในส่วนย่อยแรกคุณจะเห็นความคิดเห็นของ snip ของรหัสฉันพยายามทำ แต่ฉันไม่แน่ใจว่าฉันจะเรียกมาโครต่าง ๆ ได้อย่างไรเนื่องจากพวกมันเกี่ยวข้องกับค่าบางอย่าง

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือใด ๆ !


ทำไมคุณไม่ใส่ค่า "0GP", "0MM", "FEST" และอื่น ๆ ลงในแผ่นงานที่ซ่อนอยู่ในเวิร์กบุ๊กเองและใช้มันเพื่อขับโค้ด ถัดจากแต่ละรายการคุณสามารถวางรหัสอ้างอิงได้ คุณไม่จำเป็นต้องใช้ข้อมูลรหัสยาก Excel เป็นสถานที่สำหรับเก็บข้อมูล
Rob Sedgwick

@ RobSedgwick ฉันมีสิ่งนั้น รหัสบัญชีแต่ละบัญชีที่ฉันมีอยู่ในรายการ "0GP มีรหัสอ้างอิงที่เป็นไปได้มากมาย" ดังนั้นรหัสแต่ละรายการที่ฉันเขียนโค้ดไว้ด้านบนจะมีชีตของตัวเองที่แสดงรายการรหัสอ้างอิงจำนวนมากรหัสอ้างอิงจะอยู่ในเซลล์คอลัมน์ F เป้าหมายคือการให้เซลล์คอลัมน์ F เปลี่ยนเป็นสีแดงเพื่อระบุว่ารหัสบัญชีในคอลัมน์ D จำเป็นต้องมีรหัสอ้างอิงและเมื่อเซลล์คอลัมน์ F เป็นสีแดงมันจะสามารถคลิกได้และเมื่อคลิกก็จะเรียกมาโครซึ่งจะใช้ ผู้ใช้ไปยังแผ่นงานที่ซ่อนอยู่ซึ่งจะแสดงรายการรหัสบัญชีทั้งหมดที่เกี่ยวข้องกับค่านั้น
anve

คุณสามารถวนรอบคอลเลกชันแผ่นงานและดูที่แผ่นงานชื่อค่อนข้างยากรหัสชื่อแผ่นงานทั้งหมด เท่าที่ฉันเข้าใจคุณย่อยที่สองคุณเพียงต้องการไปที่แผ่นด้วยชื่อนั้นดังนั้นแผ่นงาน (แผ่น) การเปิดใช้งานควรทำอย่างไร
Rob Sedgwick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.