: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

แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
noona
Member
Member
Posts: 18
Joined: Thu Oct 04, 2018 8:57 pm

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#21

Post by noona »

snasui wrote: Mon Nov 19, 2018 9:19 pm
noona wrote: Mon Nov 19, 2018 3:21 pm ปัญหาในตอนแรกคือ ใช้คำสั่งเปิดไฟล์ด้วยทำให้ฐานข้อมูลเด้งขึ้นมาตอนกดบันทึก ไม่ต้องการให้เด้งขึ้นมาจึงเอาคำสั่ง Open ออก ไม่แน่ใจว่าทำตรงไหนผิด
:D ถ้าอ่านจากที่แจ้งมา ผิดตรงเอาการ Open ออกครับ หากจะบันทึกข้อมูลลงในไฟล์ต้นทาง เมื่อยังไม่เปิดไฟล์ต้นทางก็ต้องเปิดออกมาก่อน แต่เมื่อเปิดมาแล้วคำสั่งอื่น ๆ หลังจากนั้นไม่ต้องไป Open อีก เมื่อจบงานจึง Close เมื่อจะบันทึกจึงจะ Open ใหม่ เช่นนี้ครับ
อธิบายเพิ่มเติมได้ไหมค่ะ เนื่องจากในครั้งแรกอาจารย์แนะนำไว้แบบนี้
:D ตอนบันทึกไม่ต้องเขียนให้เปิดไฟล์ขึ้นมาใหม่ เพราะเปิดอยู่แล้วตอนค้นหา
Code ไหนที่เปิดการเปิดไฟล์ก็ให้ Mark เป็น Comment หรือลบทิ้งไปครับ
User avatar
logic
Gold
Gold
Posts: 1510
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#22

Post by logic »

ไม่ทราบว่างงตรงไหนครับ อาจารย์บอกไว้ว่าถ้าเปิดอยู่แล้วไม่ต้องเปิดขึ้นมาอีก

คือจะทำอะไรก็แล้วแต่ ถ้าไฟล์เปิดอยู่แล้วไม่ต้องสั่งให้เปิดอีก
noona
Member
Member
Posts: 18
Joined: Thu Oct 04, 2018 8:57 pm

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#23

Post by noona »

logic wrote: Tue Nov 20, 2018 11:15 am ไม่ทราบว่างงตรงไหนครับ อาจารย์บอกไว้ว่าถ้าเปิดอยู่แล้วไม่ต้องเปิดขึ้นมาอีก

คือจะทำอะไรก็แล้วแต่ ถ้าไฟล์เปิดอยู่แล้วไม่ต้องสั่งให้เปิดอีก
ค่ะ เข้าใจว่า เปิดมาตอนค้นหาแล้ว พอจะบันทึกไม่ต้องเปิดอีก จึงเอาคำสั่งเปิดออก แต่ติด Error เลยไม่เข้าใจว่าทำผิดตรงไหนค่ะ
astalavista
Member
Member
Posts: 48
Joined: Tue Oct 03, 2017 11:05 am

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#24

Post by astalavista »

จาก code ผมเข้าใจว่าตอนค้นหามีการปิดไฟล์หลังจากค้นหาไปแล้ว จากคำสั่ง wb.Close False ดังนั้นตอนบันทึกน่าจะต้องเปิดไฟล์ใหม่นะครับ
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#25

Post by puriwutpokin »

noona wrote: Tue Nov 20, 2018 3:39 pm
logic wrote: Tue Nov 20, 2018 11:15 am ไม่ทราบว่างงตรงไหนครับ อาจารย์บอกไว้ว่าถ้าเปิดอยู่แล้วไม่ต้องเปิดขึ้นมาอีก

คือจะทำอะไรก็แล้วแต่ ถ้าไฟล์เปิดอยู่แล้วไม่ต้องสั่งให้เปิดอีก
ค่ะ เข้าใจว่า เปิดมาตอนค้นหาแล้ว พอจะบันทึกไม่ต้องเปิดอีก จึงเอาคำสั่งเปิดออก แต่ติด Error เลยไม่เข้าใจว่าทำผิดตรงไหนค่ะ
ลองปรับตามนี้ดูครับ

Code: Select all

Private Sub CmdSave_Click()
    Dim irow As Integer
    Dim msgRepns As Integer
    Dim wb As Workbook
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Set wb = Workbooks.Open("C:\Users\THA0753H\Desktop\Data.xlsx")
    Set ws = Worksheets("Data")
    'find first empty row in database
    irow = ws.Cells(Rows.Count, 1) _
        .End(xlUp).Offset(1, 0).Row
    'Check for Id
    If (Me.TxtID.Value) = "" Then
        Me.Txtfind.SetFocus
       
    Exit Sub
    End If
    If Application.CountIf(Range("b:b"), TxtID.Text) > 0 Then
        irow = Application.Match(CDbl(TxtID.Text), Range("b:b"), 0)
        msgRepns = MsgBox("ต้องการแก้ไขข้อมูล ?", vbYesNo)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
    If msgRepns = vbNo Then
        Exit Sub
    End If
    'copy the data to the database
    ws.Cells(irow, 2).Value = Me.TxtID.Value
    ws.Cells(irow, 3).Value = Me.listTitle.Value
    ws.Cells(irow, 4).Value = Me.txtName.Value
    ws.Cells(irow, 5).Value = Me.txtSurename.Value
    ws.Cells(irow, 6).Value = Me.liststatus.Value
    ws.Cells(irow, 7).Value = Me.txtMobile.Value
    Unload Me

    'Clear the data
    Me.TxtID.Value = ""
    Me.listTitle.Value = ""
    Me.txtName.Value = ""
    Me.txtSurename.Value = ""
    Me.liststatus.Value = ""
    Me.txtMobile.Value = ""
     wb.Close True
    MsgBox "บันทึกสำเร็จ"
    Application.ScreenUpdating = True
End Sub
:shock: :roll: :D
noona
Member
Member
Posts: 18
Joined: Thu Oct 04, 2018 8:57 pm

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#26

Post by noona »

puriwutpokin wrote: Tue Nov 20, 2018 4:23 pm
noona wrote: Tue Nov 20, 2018 3:39 pm
logic wrote: Tue Nov 20, 2018 11:15 am ไม่ทราบว่างงตรงไหนครับ อาจารย์บอกไว้ว่าถ้าเปิดอยู่แล้วไม่ต้องเปิดขึ้นมาอีก

คือจะทำอะไรก็แล้วแต่ ถ้าไฟล์เปิดอยู่แล้วไม่ต้องสั่งให้เปิดอีก
ค่ะ เข้าใจว่า เปิดมาตอนค้นหาแล้ว พอจะบันทึกไม่ต้องเปิดอีก จึงเอาคำสั่งเปิดออก แต่ติด Error เลยไม่เข้าใจว่าทำผิดตรงไหนค่ะ
ลองปรับตามนี้ดูครับ

Code: Select all

Private Sub CmdSave_Click()
    Dim irow As Integer
    Dim msgRepns As Integer
    Dim wb As Workbook
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Set wb = Workbooks.Open("C:\Users\THA0753H\Desktop\Data.xlsx")
    Set ws = Worksheets("Data")
    'find first empty row in database
    irow = ws.Cells(Rows.Count, 1) _
        .End(xlUp).Offset(1, 0).Row
    'Check for Id
    If (Me.TxtID.Value) = "" Then
        Me.Txtfind.SetFocus
       
    Exit Sub
    End If
    If Application.CountIf(Range("b:b"), TxtID.Text) > 0 Then
        irow = Application.Match(CDbl(TxtID.Text), Range("b:b"), 0)
        msgRepns = MsgBox("ต้องการแก้ไขข้อมูล ?", vbYesNo)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
    If msgRepns = vbNo Then
        Exit Sub
    End If
    'copy the data to the database
    ws.Cells(irow, 2).Value = Me.TxtID.Value
    ws.Cells(irow, 3).Value = Me.listTitle.Value
    ws.Cells(irow, 4).Value = Me.txtName.Value
    ws.Cells(irow, 5).Value = Me.txtSurename.Value
    ws.Cells(irow, 6).Value = Me.liststatus.Value
    ws.Cells(irow, 7).Value = Me.txtMobile.Value
    Unload Me

    'Clear the data
    Me.TxtID.Value = ""
    Me.listTitle.Value = ""
    Me.txtName.Value = ""
    Me.txtSurename.Value = ""
    Me.liststatus.Value = ""
    Me.txtMobile.Value = ""
     wb.Close True
    MsgBox "บันทึกสำเร็จ"
    Application.ScreenUpdating = True
End Sub

:P ขอบคุณมากนะคะ คำสั่งเดียวได้ตามที่ต้องการเลย :thup:

จะรบกวนเพิ่มเติมค่ะ
พอดีต้องการให้เมื่อมีการเปลี่ยนแปลงที่อยู่ ในช่อง แขวง/ตำบล แล้วขึ้น อำเภอ จังหวัด รหัสไปรษณีย์ อัตโนมัติ เลยใช้ Fucntion Vlookup
แต่ติด Error ค่ะ ต้องปรับโค้ดยังไงคะ

Code: Select all

Private Sub listtambon1_Change()
Me.listampor1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("D3:G7428"), 2, 0)

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#27

Post by puriwutpokin »

noona wrote: Wed Nov 21, 2018 6:27 pm
puriwutpokin wrote: Tue Nov 20, 2018 4:23 pm
noona wrote: Tue Nov 20, 2018 3:39 pm

ค่ะ เข้าใจว่า เปิดมาตอนค้นหาแล้ว พอจะบันทึกไม่ต้องเปิดอีก จึงเอาคำสั่งเปิดออก แต่ติด Error เลยไม่เข้าใจว่าทำผิดตรงไหนค่ะ
ลองปรับตามนี้ดูครับ

Code: Select all

Private Sub CmdSave_Click()
    Dim irow As Integer
    Dim msgRepns As Integer
    Dim wb As Workbook
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Set wb = Workbooks.Open("C:\Users\THA0753H\Desktop\Data.xlsx")
    Set ws = Worksheets("Data")
    'find first empty row in database
    irow = ws.Cells(Rows.Count, 1) _
        .End(xlUp).Offset(1, 0).Row
    'Check for Id
    If (Me.TxtID.Value) = "" Then
        Me.Txtfind.SetFocus
       
    Exit Sub
    End If
    If Application.CountIf(Range("b:b"), TxtID.Text) > 0 Then
        irow = Application.Match(CDbl(TxtID.Text), Range("b:b"), 0)
        msgRepns = MsgBox("ต้องการแก้ไขข้อมูล ?", vbYesNo)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
    If msgRepns = vbNo Then
        Exit Sub
    End If
    'copy the data to the database
    ws.Cells(irow, 2).Value = Me.TxtID.Value
    ws.Cells(irow, 3).Value = Me.listTitle.Value
    ws.Cells(irow, 4).Value = Me.txtName.Value
    ws.Cells(irow, 5).Value = Me.txtSurename.Value
    ws.Cells(irow, 6).Value = Me.liststatus.Value
    ws.Cells(irow, 7).Value = Me.txtMobile.Value
    Unload Me

    'Clear the data
    Me.TxtID.Value = ""
    Me.listTitle.Value = ""
    Me.txtName.Value = ""
    Me.txtSurename.Value = ""
    Me.liststatus.Value = ""
    Me.txtMobile.Value = ""
     wb.Close True
    MsgBox "บันทึกสำเร็จ"
    Application.ScreenUpdating = True
End Sub

:P ขอบคุณมากนะคะ คำสั่งเดียวได้ตามที่ต้องการเลย :thup:

จะรบกวนเพิ่มเติมค่ะ
พอดีต้องการให้เมื่อมีการเปลี่ยนแปลงที่อยู่ ในช่อง แขวง/ตำบล แล้วขึ้น อำเภอ จังหวัด รหัสไปรษณีย์ อัตโนมัติ เลยใช้ Fucntion Vlookup
แต่ติด Error ค่ะ ต้องปรับโค้ดยังไงคะ

Code: Select all

Private Sub listtambon1_Change()
Me.listampor1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("D3:G7428"), 2, 0)

End Sub
ปรับตามนี้ครับ

Code: Select all

Private Sub listtambon1_Change()
On Error Resume Next
Me.listampor1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 2, 0)
Me.listprovince1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 3, 0)
Me.Txtcode1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 4, 0)
End Sub
:shock: :roll: :D
noona
Member
Member
Posts: 18
Joined: Thu Oct 04, 2018 8:57 pm

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#28

Post by noona »

จะรบกวนเพิ่มเติมค่ะ
พอดีต้องการให้เมื่อมีการเปลี่ยนแปลงที่อยู่ ในช่อง แขวง/ตำบล แล้วขึ้น อำเภอ จังหวัด รหัสไปรษณีย์ อัตโนมัติ เลยใช้ Fucntion Vlookup
แต่ติด Error ค่ะ ต้องปรับโค้ดยังไงคะ

Code: Select all

Private Sub listtambon1_Change()
Me.listampor1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("D3:G7428"), 2, 0)

End Sub
[/quote]
ปรับตามนี้ครับ

Code: Select all

Private Sub listtambon1_Change()
On Error Resume Next
Me.listampor1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 2, 0)
Me.listprovince1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 3, 0)
Me.Txtcode1 = Application.VLookup(listtambon1.Value, Worksheets("Address").Range("C3:G7428"), 4, 0)
End Sub
[/quote]

ขอบคุณมากนะคะ รบกวนช่วยแนะนำเพิ่มเติมด้วยค่ะ ไม่ต้องการให้ในช่อง เขต/อำเภอ โชว์ข้อมูลเหมือนกัน จากไฟล์ Sheet Address มีเขตบางมด 2 ที่ แต่คนล่ะเขตกัน แต่จากรูปโชว์เป็น เขตเดียวกัน
)

Code: Select all

Private Sub listtambon1_Change()

On Error Resume Next
    Dim Amphur1 As Range
    Dim iStart As Integer
    Dim iStop As Integer
    With Sheets("Address")
    
        iStart = Application.Match(listtambon1, .Range("C:C"), 0)
        iStop = Application.CountIf(.Range("C:C"), listtambon1)
        Set Amphur1 = .Range("D" & iStart).Resize(iStop)
    End With
    listampor1 = ""
    listprovince1 = ""
    Txtcode1 = ""
    listampor1.RowSource = "Address!" & Amphur1.Address
End Sub

Private Sub Userform_Activate()
    On Error Resume Next
    Dim tambon1 As String
    tambon1 = Range("C3:f7428").Address
    listtambon1.RowSource = "Address!" & tambon1
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: แก้ไขข้อมูลที่มีอยู่แล้ว ผ่าน userForm

#29

Post by snasui »

noona wrote: Thu Nov 22, 2018 5:57 pm ขอบคุณมากนะคะ รบกวนช่วยแนะนำเพิ่มเติมด้วยค่ะ ไม่ต้องการให้ในช่อง เขต/อำเภอ โชว์ข้อมูลเหมือนกัน จากไฟล์ Sheet Address มีเขตบางมด 2 ที่ แต่คนล่ะเขตกัน แต่จากรูปโชว์เป็น เขตเดียวกัน
:D กรณีข้อมูลไม่อยู่ติดกัน ต้องใช้การ Loop เข้ามาวางใน ListBox จะกำหนด RowSource ซึ่งใช้ข้อมูลที่ติดกัน โดยใช้ Countif เพื่อนับจำนวนในความหมายว่าติดกันกี่จำนวนแล้วกำหนดมาเป็นช่วงเซลล์ใน RowSource เช่นนี้ไม่ได้ครับ
Post Reply