:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
mayer02
Member
Member
Posts: 9
Joined: Wed Jul 13, 2016 5:10 pm

อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#1

Post by mayer02 »

ในไฟล์แนบจะมี Name Range อยู่จำนวนหนึ่งที่มีชื่อขึ้นต้นด้วย "W_" สิ่งที่ต้องการคือต้องการอัพเดท Name Range ให้มีค่าปัจจุบันหลังจากมีการอัพเดทข้อมูลเพิ่มเข้าไป เช่น Name Range "W_1st" อ้างถึงเซลล์ Sheet1!$B$2:$B$28 แต่พอเพิ่มข้อมูลเข้าไปเกิน 28 แถว Name Range จะใช้ต่อไม่ได้
ลองทำ Dynamic Name Range แล้วไม่ไหวไฟล์หนักเกินไปครับ
ขอบคุณครับ
Attachments
sample.xlsx
(12.21 KiB) Downloaded 8 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#2

Post by snasui »

:D กรณี VBA จำเป็นต้องเขียนมาเองก่อน ถามกันเฉพาะที่ติดปัญหาครับ

การเขียน Dynamic named range เดิมเขียนไว้อย่างไรจึงมีปัญหา แจ้งวิธีดังกล่าวมาด้วยเพื่อจะได้ช่วยดูให้ได้ครับ
mayer02
Member
Member
Posts: 9
Joined: Wed Jul 13, 2016 5:10 pm

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#3

Post 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 เองตามข้อมูลแถวสุดท้ายของไฟล์ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#4

Post by snasui »

:D แนบ Code มาในไฟล์ด้วยเพื่อสะดวกในการทดสอบครับ

สำหรับการโพสต์ Code ให้อ่านกฎการใช้บอร์ดข้อ 5 ด้านบนประกอบครับ :roll:
mayer02
Member
Member
Posts: 9
Joined: Wed Jul 13, 2016 5:10 pm

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#5

Post by mayer02 »

แนบไฟล์ให้ใหม่แล้วครับ :D
ทบทวนปัญหาที่เกิดขึ้นนะครับ
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 ได้อัตโนมัติ
Attachments
sample.xlsm
ไฟล์แนบที่มีโค๊ด VBA
(17.44 KiB) Downloaded 7 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#6

Post by snasui »

:D ตัวอย่างการปรับ 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
mayer02
Member
Member
Posts: 9
Joined: Wed Jul 13, 2016 5:10 pm

Re: อยากทราบวิธีการอัพเดท Name Range โดยใช้ VBA

#7

Post by mayer02 »

:D work great ขอบคุณครับ
Post Reply