เพื่อมุ่งให้เกิดคุณภาพจากการอบรมสูงสุด Excel Expert Training ให้การอบรม Excel กลุ่มเล็กๆ ไม่เกิน 6 คนทุกคนสามารถเรียนรู้ Excel อย่างใกล้ชิด จะมาคนเดียวหรือมาเป็นกลุ่มแล้วนัดวันอบรมแบบส่วนตัวก็ได้ ผู้เข้าอบรมทุกคนสามารถติดตามเนื้อหาที่อบรมได้อย่างชัดเจนจากจอภาพด้านหน้าของตัวเอง
Page 1 of 2 12 LastLast
Results 1 to 10 of 15

Thread: ต้องการหารหัส VBA แสดงชื่อของเซลล์

  1. #1
    สมเกียรติ
    Guest

    ต้องการหารหัส VBA แสดงชื่อของเซลล์

    สวัสดีครับ

    สมมติว่า เราตั้งชื่อเซลล์ A1 ว่า "Goal"

    จะหาว่าเซลล์ A1 มีชื่อว่าอะไร ได้อย่างไรด้วย VBA

    ขอบคุณครับ

  2. #2
    gaka
    Guest
    ผมทำเป็น ฟังชั่นหาออกมาครับ
    เอา range() ไปครอบมันเลยก็ได้ชือออกมาเหมือนกัน
    ขอลบออกเพราะมันทำงานไม่ได้ ทำไมเดี่ยวรันผ่านเดี๋ยวไม่ผ่าน งง

  3. #3
    neang
    Guest
    สวัสดีครับ
    ตามความเข้าใจของผม คืออาจารย์ต้องการหา ว่า cellใดๆเพียง1cell อยู่ใน name ใด
    ผมได้ลองเขียน vba เป็น function ดังนี้ครับ
    Code:
    Function NameFromCell(Getrange As Range)    Dim i As Integer
        Dim namerange As Range
        Dim Elerange As Range
        For i = 1 To Workbooks.Application.Names.Count
            Set namerange = Range(Workbooks.Application.Names(i).Value)
            For Each Elerange In namerange
                If Elerange.Address = Getrange.Address Then
                    NameFromCell = Workbooks.Application.Names(i).Name
                    Exit Function
                End If
            Next
        Next
    End Function
    ขั้นตอน ที่1 คือเราต้องกำหนด range ของแต่ละname ไว้ตัวแปล range ก่อนโดยอาศัย for next วนloop ทุกname ครับ
    แล้ว set ค่า rangeของ name ไว้ตัวแปร แต่ละืnames

    ขั้นตอนที่ 2 คืออาศัย for each หาค่า range ใน rangeของname แต่ละตัว

    ขั้นตอนที่ 3 เปรียบเทียบaddress ที่เราต้องการหา กับ rangeที่อยู่ในName ใดๆ ว่าตรงกันหรือยัง ถ้าตรงก็แสดงชื่อ name นั้นครับ

    ไม่ทราบว่าแบบนี้จะได้ตรงกับคำตอบหรือไม่นะครับ ^^ ขออภัยด้วยถ้าผิดพลาดนะครับ

  4. #4
    สมเกียรติ
    Guest
    ที่มาของคำถามเกิดจากการใช้ Event ตามนี้ครับ

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    อยากตรวจสอบ Target ว่าเป็นเซลล์ที่ตั้งชื่อไว้ตามนั้นหรือไม่ ถ้าใช่จึงทำงานต่อ
    End Sub

    ตอนนี้คิดออกมาได้แต่เพียงใช้ address ตรวจสอบว่าตรงกับ address ของชื่อ New ที่ตั้งไว้ ตามนี้ครับ

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = Range("New").Address Then
    RunMyCode
    End If
    End Sub

    ไม่อยากใช้การตรวจสอบ intersect ด้วยครับ ถ้าใช้แบบคุณ neang ยาวทีเดียว น่าจะมีวิธีสั้นๆ :toetap05:

  5. #5
    vajra
    Guest
    ขออภัย

  6. #6
    PichaiTC
    Guest
    ยังไม่ค่อยเข้าใจคำถามครับ
    ขอยืนยันความเข้าใจหน่อยครับ
    1. จะมีการตั้ง ชื่อ ไว้หลาย ชื่อ ใน sheet?
    2. แต่ละชื่อ จะอ้างอิงถึงแค่ 1 cell ?
    3. เมื่อเลือกที่ cell ที่มีการตั้ง ชื่อ ไว้ จะทำงานแตกต่างกันไปตาม ชื่อ ที่ตั้งไว้ ?
    4. ไม่มีการแสดงชื่อกำกับ เช่น ข้อความใน A1 = "Goal" แล้ว B1 ตั้ง ชื่อ ว่า Goal ?

  7. #7
    สมเกียรติ
    Guest
    ขอแบบง่ายๆก่อนครับ ในแฟ้มมีแค่ชื่อเดียว ที่เซลล์เดียว A1 ตั้งชื่อว่า New
    เซลล์ A1 มีค่าใดๆหรือไม่มีค่าก็ได้ครับ

    แทนที่จะใช้รหัสตามแฟ้มแนบนี้ อยากให้แสดง MsgBox เมื่อเซลล์ A1 มีค่าเปลี่ยนไป

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = Range("New").Address Then
    MsgBox "Hello"
    End If
    End Sub

    ส่วนที่เป็นสีแดง ผมอยากหารหัสที่ใช้ตรวจสอบว่า A1 มีชื่อว่า New แทนครับ

    ผมลองแบบนี้แล้วไม่ทำงาน

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Names.Name = "New" Then
    MsgBox "Hello"
    End If
    End Sub

  8. #8
    PichaiTC
    Guest
    ขอโทษนะครับ ยังไม่เข้าใจจริงๆ
    ผมกลับรู้สึกว่า code ของอาจารย์ ก็น่าจะใช้งานได้ดีอยู่แล้ว แต่อาจาย์กลับว่าอยากได้อีกแบบแทน ผมเลยตีความจนไปไม่ถูกเหมือนกัน

  9. #9
    vajra
    Guest
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    For Each i In Application.Names
    If InStr(i, Target.Address) > 0 Then MsgBox i.Name
    Next
    End Sub

  10. #10
    neang
    Guest
    Quote Originally Posted by สมเกียรติ View Post
    ขอแบบง่ายๆก่อนครับ ในแฟ้มมีแค่ชื่อเดียว ที่เซลล์เดียว A1 ตั้งชื่อว่า New
    เซลล์ A1 มีค่าใดๆหรือไม่มีค่าก็ได้ครับ

    แทนที่จะใช้รหัสตามแฟ้มแนบนี้ อยากให้แสดง MsgBox เมื่อเซลล์ A1 มีค่าเปลี่ยนไป

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = Range("New").Address Then
    MsgBox "Hello"
    End If
    End Sub

    ส่วนที่เป็นสีแดง ผมอยากหารหัสที่ใช้ตรวจสอบว่า A1 มีชื่อว่า New แทนครับ

    ผมลองแบบนี้แล้วไม่ทำงาน

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Names.Name = "New" Then
    MsgBox "Hello"
    End If
    End Sub
    ผมลอง code ตามนี้นะครับ คือ ผมกำหนด Name ชื่อว่า goal range คือ A1 จะได้ว่า names ชื่อ goal มีแค่cell A1 ครับ
    Code:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)    
    If Target.Address = Range(Application.Names("goal").Value).Address Then MsgBox "hello"
    End Sub
    ไม่ทราบตรงกับความต้องการหรือไม่นะครับ ^^

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •