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
:D ตัวอย่างการปรับ 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
:D ปรับ Code ที่ยกมาด้านบนเป็นด้านล่างครับ

Code: Select all

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