Page 1 of 1
อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Mon Jun 19, 2017 5:08 pm
by mayer02
ในไฟล์แนบจะมี Name Range อยู่จำนวนหนึ่งที่มีชื่อขึ้นต้นด้วย "W_" สิ่งที่ต้องการคือต้องการอัพเดท Name Range ให้มีค่าปัจจุบันหลังจากมีการอัพเดทข้อมูลเพิ่มเข้าไป เช่น Name Range "W_1st" อ้างถึงเซลล์ Sheet1!$B$2:$B$28 แต่พอเพิ่มข้อมูลเข้าไปเกิน 28 แถว Name Range จะใช้ต่อไม่ได้
ลองทำ Dynamic Name Range แล้วไม่ไหวไฟล์หนักเกินไปครับ
ขอบคุณครับ
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Mon Jun 19, 2017 7:50 pm
by snasui
กรณี VBA จำเป็นต้องเขียนมาเองก่อน ถามกันเฉพาะที่ติดปัญหาครับ
การเขียน Dynamic named range เดิมเขียนไว้อย่างไรจึงมีปัญหา แจ้งวิธีดังกล่าวมาด้วยเพื่อจะได้ช่วยดูให้ได้ครับ
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Tue Jun 20, 2017 11:53 am
by mayer02
ผมเขียนโค๊ดได้ป่ะมาณนี้ครับ
Sub updateName_range()
Dim nr As Name
Dim W_lastrow As Long
W_lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For Each nr In ActiveWorkbook.Names
If nr.Name Like "W_*" Then
Range(nr.Name).Select
With nr
.RefersToR1C1 = "=Sheet1!R2C12:R39C12"
End With
End If
Next nr
End Sub
อยากให้ตรง .RefersToR1C1 มันขยาย Range เองตามข้อมูลแถวสุดท้ายของไฟล์ครับ
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Tue Jun 20, 2017 9:02 pm
by snasui
แนบ Code มาในไฟล์ด้วยเพื่อสะดวกในการทดสอบครับ
สำหรับการโพสต์ Code ให้อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Wed Jun 21, 2017 8:29 am
by mayer02
แนบไฟล์ให้ใหม่แล้วครับ
ทบทวนปัญหาที่เกิดขึ้นนะครับ
1. ไฟล์ตั้งต้นมีข้อมูล 28 แถว และแต่ละคอลัมน์ มีการสร้าง Name Range ไว้ที่ 28 แถวเช่นกัน
2. มีการอัพเดทข้อมูลมาเป็น 39 แถว
ต้องการสร้าง VBA ให้อัพเดท Name Range จากเดิมที่จบอยู่ที่แถวที่ 28 เป็นแถวที่ 39 (แถวสุดท้ายของข้อมูล) โดยโค๊ดที่สร้างมาข้างต้นดังนี้
Code: Select all
Sub updateName_range()
Dim nr As Name
Dim W_lastrow As Long
W_lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For Each nr In ActiveWorkbook.Names
If nr.Name Like "W_*" Then
Range(nr.Name).Select
With nr
.RefersToR1C1 = "=Sheet1!R2C12:R39C12"
End With
End If
Next nr
End Sub
โค๊ดนี้ติดปัญหาที่ .RefersToR1C1 ยังไม่สามารถอัพเดท Range ได้อัตโนมัติ
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Wed Jun 21, 2017 9:12 pm
by snasui
ตัวอย่างการปรับ Code ครับ
Code: Select all
Sub updateName_range()
Dim nr As Name, W_lastrow As Long
Dim oldFr As Long
W_lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For Each nr In ActiveWorkbook.Names
If nr.Name Like "W_*" Then
oldFr = Range(nr).Cells(1).Row
Range(nr).Resize(W_lastrow - oldFr + 1, 1).Name = nr.Name
End If
Next nr
End Sub
Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA
Posted: Thu Jun 22, 2017 9:08 am
by mayer02
work great ขอบคุณครับ