Page 1 of 1
CodeVB เมื่อค่าในเซลเปลี่ยนไป ให้ค่าในอีกเซลหนุึ่งแสดงตามที่กำหนดไว้ในอีกเซลหนึ่ง
Posted: Sun Mar 30, 2025 9:47 pm
by tigerwit
จากไฟล์ที่แนบมา
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$3" Then
ActiveSheet.Range("D2").Value = Sheet2.Range("B1").Value
End If
End Sub
ที่ชีท Sheet1 เมื่อค่าในเซล D3 เปลี่ยนไป
ต้องการให้ที่เซล D2 มีค่าเปลี่ยนไปตามข้อมูลที่มีในชีท Sheet2 ที่อยู่ใน B1 ถึง B20
โดยทุกครั้งที่ค่าใน D3 เปลี่ยน ค่าใน D2 ก็เปลี่ยนไปเรื่อย ๆ จนเมื่อเปลี่ยน 20 ครั้ง ก็ให้วนกลับมาดึงค่าใน B1 ไปแสดงผล
ต้องปรับ โค๊ดอย่างไรครับ
Re: CodeVB เมื่อค่าในเซลเปลี่ยนไป ให้ค่าในอีกเซลหนุึ่งแสดงตามที่กำหนดไว้ในอีกเซลหนึ่ง
Posted: Mon Mar 31, 2025 6:49 am
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ofs As Integer
Application.EnableEvents = False
With ActiveSheet
ofs = .Range("d1").Value
If Target.Address = "$D$3" Then
.Range("D2").Value = _
Sheet2.Range("B1").Offset(ofs, 0).Value
.Range("d1").Value = .Range("d1").Value + 1
If .Range("d1").Value = 20 Then .Range("d1").Value = 0
End If
End With
Application.EnableEvents = True
End Sub
ด้านบนนี้เป็นการฝากค่าจำนวนนับไว้ที่ D1 สามารถเปลี่ยนตำแหน่งไปที่เซลล์อื่นตามต้องการครับ
Re: CodeVB เมื่อค่าในเซลเปลี่ยนไป ให้ค่าในอีกเซลหนุึ่งแสดงตามที่กำหนดไว้ในอีกเซลหนึ่ง
Posted: Mon Mar 31, 2025 7:16 am
by tigerwit
ขอบคุณครับผม
Re: CodeVB เมื่อค่าในเซลเปลี่ยนไป ให้ค่าในอีกเซลหนุึ่งแสดงตามที่กำหนดไว้ในอีกเซลหนึ่ง
Posted: Mon Mar 31, 2025 9:52 am
by tigerwit
กรณีที่ใช้ UserForm เป็นตัวกรอกข้อมูลแทนการกรอกลงใน Sheet ตรงๆ
โดยใช้ ปุ่มเรียก Userform ขึ้นมากรอก ในขณะที่ไม่ได้ Active ที่ Sheet1 (Active อยู่ที่ Sheet Main)
จะต้องปรับโค๊ดใน CommandButton1_Click อย่างไรครับ จึงจะทำให้ ค่าใน sheet1 เซล D3 เปลี่ยน
Code: Select all
Private Sub CommandButton1_Click()
Sheet1.Range("D3") = UserForm1.Txt01.Value
Unload Me
End Sub
Re: CodeVB เมื่อค่าในเซลเปลี่ยนไป ให้ค่าในอีกเซลหนุึ่งแสดงตามที่กำหนดไว้ในอีกเซลหนึ่ง
Posted: Mon Mar 31, 2025 11:46 am
by snasui
snasui wrote: Mon Mar 31, 2025 6:49 am
Code: Select all
Application.EnableEvents = False
With ActiveSheet
ofs = .Range("d1").Value

ปรับ Code ที่ยกมาด้านบนเป็นด้านล่างครับ
Code: Select all
Application.EnableEvents = False
With Target.Parent
ofs = .Range("d1").Value
Target
คือเซลล์ที่เปลี่ยนค่า ส่วน
Target.Parent
เป็นการอ้างอิงไปยัง Object ที่มีลำดับชั้นสูงกว่า Target นั้น ในกรณีนี้เมื่อ Target คือเซลล์ Parent คือชีตที่เซลล์นั้นบรรจุอยู่ครับ