สวัสดีครับ
สมมติว่า เราตั้งชื่อเซลล์ A1 ว่า "Goal"
จะหาว่าเซลล์ A1 มีชื่อว่าอะไร ได้อย่างไรด้วย VBA
ขอบคุณครับ
Printable View
สวัสดีครับ
สมมติว่า เราตั้งชื่อเซลล์ A1 ว่า "Goal"
จะหาว่าเซลล์ A1 มีชื่อว่าอะไร ได้อย่างไรด้วย VBA
ขอบคุณครับ
ผมทำเป็น ฟังชั่นหาออกมาครับ
เอา range() ไปครอบมันเลยก็ได้ชือออกมาเหมือนกัน
ขอลบออกเพราะมันทำงานไม่ได้ :( ทำไมเดี่ยวรันผ่านเดี๋ยวไม่ผ่าน งง
สวัสดีครับ
ตามความเข้าใจของผม คืออาจารย์ต้องการหา ว่า cellใดๆเพียง1cell อยู่ใน name ใด
ผมได้ลองเขียน vba เป็น function ดังนี้ครับ
ขั้นตอน ที่1 คือเราต้องกำหนด range ของแต่ละname ไว้ตัวแปล range ก่อนโดยอาศัย for next วนloop ทุกname ครับ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
แล้ว set ค่า rangeของ name ไว้ตัวแปร แต่ละืnames
ขั้นตอนที่ 2 คืออาศัย for each หาค่า range ใน rangeของname แต่ละตัว
ขั้นตอนที่ 3 เปรียบเทียบaddress ที่เราต้องการหา กับ rangeที่อยู่ในName ใดๆ ว่าตรงกันหรือยัง ถ้าตรงก็แสดงชื่อ name นั้นครับ
ไม่ทราบว่าแบบนี้จะได้ตรงกับคำตอบหรือไม่นะครับ ^^ ขออภัยด้วยถ้าผิดพลาดนะครับ
ที่มาของคำถามเกิดจากการใช้ 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:
ขออภัย
ยังไม่ค่อยเข้าใจคำถามครับ
ขอยืนยันความเข้าใจหน่อยครับ
1. จะมีการตั้ง ชื่อ ไว้หลาย ชื่อ ใน sheet?
2. แต่ละชื่อ จะอ้างอิงถึงแค่ 1 cell ?
3. เมื่อเลือกที่ cell ที่มีการตั้ง ชื่อ ไว้ จะทำงานแตกต่างกันไปตาม ชื่อ ที่ตั้งไว้ ?
4. ไม่มีการแสดงชื่อกำกับ เช่น ข้อความใน A1 = "Goal" แล้ว B1 ตั้ง ชื่อ ว่า Goal ?
ขอแบบง่ายๆก่อนครับ ในแฟ้มมีแค่ชื่อเดียว ที่เซลล์เดียว 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 ของอาจารย์ ก็น่าจะใช้งานได้ดีอยู่แล้ว แต่อาจาย์กลับว่าอยากได้อีกแบบแทน ผมเลยตีความจนไปไม่ถูกเหมือนกัน :confused:
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
ผมลอง 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