Page 2 of 3

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 9:16 pm
by snasui
:D เติมชื่อชีทเข้าไปด้วย ของเดิมเขียนตกไปครับ เป็นเช่น e = wbShare.sheets("abcd").range("a" & rows.count).end(xlup).value

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Tue Dec 24, 2013 12:08 pm
by suka
:thup: ขอบคุณค่ะอาจารย์ Code หาค่าสุดท้ายได้แล้วค่ะ

แต่ยังไม่โชว์ค่าสุดท้ายที่ชีท Form เซลล์ N1 ตามประเภทเอกสารที่เซลล์ O1 เมื่อมีการบันทึกข้อมูลต่อจากผู้อื่นค่ะ
suka wrote: ขอรบกวนช่วยแก้เมื่อใช้ Form บันทึกข้อมูลไปที่แชร์ไฟล์พร้อมกันแล้วเลขที่เอกสารที่เซลล์ N1 ชีท Enterthedata ต้วอย่างไฟล์แนบไม่อัพเดทค่ะ

Code: Select all

With Worksheets("Enterthedata")
    .Range("N1") = .Range("N1") + 1
End With

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Tue Dec 24, 2013 4:46 pm
by snasui
:D ไม่โชว์ก็เป็นปกติครับ เพราะว่ายังไม่ได้เขียน Code ให้นำค่าที่หาได้มาใช้ ลองเขียนมาก่อน ติดแล้วค่อยถามกันครับ

Code นั้นเป็น Code เดิม ผมไม่ถือว่าได้ปรับมาเองแล้วครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Tue Dec 24, 2013 7:45 pm
by suka
Code เดิมนี้ใช้ไม่ได้แล้วหรือคะ

Code: Select all

With Worksheets("Enterthedata")
    .Range("N1") = .Range("N1") + 1
End With
หากเราต้องการให้ค่าสุดท้ายโชว์ที่ Form เซลล์ N1 และกลุ่มเอกสารไฟล์ wbShare คอลัมน์ B เลขที่คอลัมน์ E เขียน Code แบบนี้ ขอรบกวนอาจารย์ช่วยแนะนำเพิ่มค่ะ

Code: Select all

If Worksheets("Enterthedata").Range("N1") = "" Then
   Set re = wbShare.Sheets("Sheet1").Range("B2").Range("E") + 1
End If

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Tue Dec 24, 2013 8:11 pm
by snasui
:D ช่วยทบทวนอีกรอบว่าเซลล์ N1 ที่ชีท Enterthedata ใช้เพื่อให้หมายเลขลำดับถัดไปที่จะบันทึกใช่หรือไม่ครับ

ถ้าใช่ Code นี้ใช้ไม่ได้ครับ

Code: Select all

With Worksheets("Enterthedata")
    .Range("N1") = .Range("N1") + 1
End With
เนื่องจากเป็น Code สำหรับการบันทึกเพียงคนเดียวและเป็นการให้ลำดับไว้ล่วงหน้า

ค่าที่จะนำมาบันทึกจะต้องเป็นค่าลำดับสุดท้ายใน Database โดยดึงค่านั้นมาแล้วบวกด้วย 1 เพื่อที่จะให้เป็นหมายเลขถัดไปแล้วนำไปบันทึก

ค่าหมายเลขสุดท้ายเราได้มาแล้วด้วย Code

Code: Select all

e = wbShare.sheets("abcd").range("a" & rows.count).end(xlup).value
หากต้องการให้เป็นหมายเลขถัดไปก็แค่บวกด้วย 1 ก็จะกลายเป็น

Code: Select all

e = wbShare.sheets("abcd").range("a" & rows.count).end(xlup).value+1
ซึ่งจะนำไปเป็นหมายเลขเอกสารแทนค่าใน N1 ของชีท Enterthedata ครับ

ส่วนเซลล์ N1 ไม่จำเป็นต้องใช้สำหรับเพื่อการนี้อีกต่อไป แต่จะใช้เพื่อการใดก็แล้วแต่เห็นสมควรครับ

ส่วนการนำค่า e ไปบันทึกใน Database ให้ลองเขียนมาเอง ติดตรงไหนค่อยถามกันต่อครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 25, 2013 8:57 am
by suka
อาจารย์คะ หากนำค่า e บวก N1 ได้ไหมคะ

Code: Select all

With Worksheets("Enterthedata")
    .Range("N1") = .Range("N1" & e)
End With

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 25, 2013 6:24 pm
by snasui
:D การใช้เครื่องหมาย & เป็นการเชื่อมข้อความ ไม่ใช่การบวก สำหรับการบวกจะต้องเป็นการบวกตัวเลขกับตัวเลขและต้องใช้เครื่องหมายบวกครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 5:36 pm
by suka
เรียนอาจารย์คะเขียน Code ให้ชีท Enterthedata เซลล์ N1 รับค่า e ไปใช้ยังไม่ได้ค่ะ Code ด้านล่างนี้ต้องปรับอย่างไรคะ

Code: Select all

With wbShare
     e = wbShare.Sheets("Sheet1").Range("e" & Rows.Count).End(xlUp).Value + 1
     Worksheets("Enterthedata").Range("N1").Value = e
End With

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 6:30 pm
by snasui
:D Code ที่เขียนมานั้นผิดพลาดอย่างไรครับ :?:

Code ที่เขียนมานั้น สามารถปรับเป็นด้านล่าง

Code: Select all

With wbShare
     e = .Sheets("Sheet1").Range("e" & Rows.Count).End(xlUp).Value + 1
     FormBook.Worksheets("Enterthedata").Range("N1").Value = e
End With
สังเกตว่าภายใน With wbShare...End With เราสามารถละคำว่า wbShare ออกไปได้ นี่คือประโยชน์ของ With..End With หากต้องการจะเขียนเต็ม ๆ ก็ไม่ต้องเขียน With...End With มาครอบครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 7:19 pm
by suka
Code ใช้แค่นี้หรือคะอาจารย์ แต่ทดลองแล้วค่าตัวเลขเมื่อบันทึกแล้ว Save แล้วค่าตัวเลขไม่ + 1 ค่ะ

Code: Select all

e = .Sheets("Sheet1").Range("e" & Rows.Count).End(xlUp).Value + 1
FormBook.Worksheets("Enterthedata").Range("N1").Value = e

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 7:44 pm
by snasui
:shock: ผมพยายามให้ทบทวนกรณีนี้หลายรอบมากครับ ช่วยขึ้นไปอ่านด้านบนให้เข้าใจว่าผมถามอะไรไปบ้างและได้ตอบแล้วหรือไม่ ยกตัวอย่างเช่น
snasui wrote: ช่วยทบทวนอีกรอบว่าเซลล์ N1 ที่ชีท Enterthedata ใช้เพื่อให้หมายเลขลำดับถัดไปที่จะบันทึกใช่หรือไม่ครับ
จากคำถามนี้ ถ้าใช่ หมายความว่าตัวเลขที่บันทึก ณ ครั้งนี้ไม่ใช่หมายเลขหลังบวก 1 แต่เป็นหมายเลขที่ให้ไว้แล้วในครั้งก่อนซึ่งเป็นค่าใน N1 นั่นหมายความว่าเป็นตัวเลขก่อนบวก 1 การบวก 1 เพื่อจะเอาไปใช้ในครั้งถัดไป ไม่ใช่ใช้ในครั้งนี้ ต้องเข้าใจตรงนี้และตอบตรงนี้ให้ได้ก่อนครับ

และหาก N1 เป็นตัวเลขที่ให้ไว้ล่วงหน้า จะใช้ไม่ได้อีกต่อไป เพราะเราต้องใช้ตัวเลขหลังบวกด้วย 1 ทันที นั่นหมายความว่า เมื่อได้ตัวเลขสุดท้ายมาแล้วนำไปบวกด้วย 1 แล้วนำไปบันทึกทันทีเลย ไม่ต้องไปเขียนฝากไว้ที่ไหนอีก เพราะไม่จำเป็นสำหรับกรณีนี้ครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 8:01 pm
by suka
อาจารยคะ หากเราประจำเป็นต้องใช้เอกสารหลายกลุ่มละคะ ต้องทำอย่างไรคะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 26, 2013 8:04 pm
by snasui
:D จะใช้สักกี่กลุ่มก็เขียนด้วย Code หามาได้ทั้งนั้นครับ ส่วนจะเขียนอย่างไรจะต้องเขียนมาก่อนเสมอไป ติดส่วนใดแล้วค่อยมาถามกันครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 27, 2013 7:36 pm
by suka
เรียนอาจารย์ค่ะ หากต้องการให้ Code ดึงเลขที่เอกสารตามกลุ่มที่เลือกจากชีท Form และกลุ่มเอกสารเป็น Text ใช้ Code นี้และ Count ได้ไหมคะ

N1 เพื่อให้หมายเลขลำดับถัดไปนำไปบันทึก O1 เพื่อเลือกกลุ่มเอกสารค่ะ

a= formBook.Sheets("Enterthedata").Range("O1" & Rows.[color=#FF0000]Count[/color]).End(xlUp).Value

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 27, 2013 7:54 pm
by snasui
:D .rows.count เป็นการนับว่า Worksheet นั้นมีกี่บรรทัด เป็นการเขียนให้เกิดความยืดหยุ่นต่อ Excel ที่ต่าง Version กันเนื่องจากว่ามีบรรทัดไม่เท่ากัน

ปกติการหาค่าสุดท้าย (ไม่ว่าจะเป็น Text หรือเป็น Number) ที่มีข้อมูลในคอลัมน์ A ของ Workbook ลำดับที่ 1 จากสมุดงานที่เปิดขึ้นมาทั้งหมด ในชีทลำดับที่ 1 ของ Workbook นั้น จะใช้เป็น เช่น workbooks(1)Sheets(1).range("a" & rows.count).end(xlup) สังเกตว่าหลัง a จะไม่ใส่ตัวเลขเข้าไปอีก เพราะตัวเลขมาจาก .rows.count อยู่แล้ว

การเข้าถึงค่าสุดท้ายโดยระบุกลุ่มจะต้องมีเงื่อนไขมากกว่าที่เขียนมาครับ เพราะต้องหาว่ากลุ่มไหนด้วย ไม่ใช่เงื่อนไขแค่ค่าสุดท้ายครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 27, 2013 8:06 pm
by suka
ต้องระบุชีทที่เก็บกลุ่มใช่ไหมคะ และ Code หาว่ากลุ่มไหนต้องใช้ตัวไหนคะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 27, 2013 8:17 pm
by snasui
:D ต้องเข้าไปหามาจากฐานข้อมูลครับ ถ้ายังไม่มีก็จะสร้างใหม่แล้วระบุเป็นลำดับที่ 1 ถ้ามีแล้วต้องหาว่าลำดับสุดท้ายเป็นเท่าไร หาได้แล้วค่อยบวกไปอีก 1 ลำดับ

โปรดทราบว่าผมไม่ตอบคำถามที่ว่าเขียนอย่างไรนะครับ คำถามควรเป็นปรับอย่างไร แก้อย่างไร เป็นต้น การใช้ VBA จำเป็นต้องศึกษามาเป็นลำดับ จำเป็นต้องหาวิธีเขียนมาเองเท่านั้น เขียนได้เท่าไรก็เท่านั้น แต่ต้องเขียนให้เข้าข่ายในเรื่องที่กำลังจะทำ เมื่อติดปัญหาแล้วค่อยถามกันครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 27, 2013 8:42 pm
by suka
ค่ะอาจารย์ จะลองทำดูค่ะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Mar 20, 2014 5:57 pm
by suka
เรียนอาจารย์และท่านผู้รู้ช่วยเรื่องปรับโค๊ดค่ะ ต้องการปรับโค๊ดให้ตรวจสอบกลุ่มเอกสารที่ฐานข้อมูลไฟล์ wbShare ชีท Sheet1 ฐานข้อมูลลำดับที่กลุ่มเอกสารที่คอลัมน์ D ค่ะ กรอกข้อมูลลำดับที่เซลล์ N2 ชีท Enterthedata ค่ะ ขอรบกวนช่วยโค๊ดที่แนบมานี้ควรปรับอย่างไรค่ะ ขอบคุณค่ะ

Code: Select all

With wbShare
        o = .Sheets("Sheet1").Range("D" & Rows.Count).End(xlUp) = formBook.Worksheets("Enterthedata").Range("n2")
End With
จาก Code ทั้งชุดนี้ค่ะ

Code: Select all

Sub PasteData()
        Dim wbShare As Workbook
        Dim formBook As Workbook
        Dim rTarget As Range
        Dim i As Integer
        Dim e As Long
        Dim o As Long
        Dim rs As Range
        Dim rt As Range
        Dim rd As Range
        Set formBook = ThisWorkbook
        Set wbShare = Workbooks("PoWbShare.xlsx")
         Application.ScreenUpdating = False
        With wbShare
                e = .Sheets("Sheet1").Range("e" & Rows.Count).End(xlUp).Value + 1
                formBook.Worksheets("Enterthedata").Range("m2").Value = e
                With wbShare
                    o = .Sheets("Sheet1").Range("D" & Rows.Count).End(xlUp) = formBook.Worksheets("Enterthedata").Range("n2")
                End With
        End With
        
        With formBook
                i = .Worksheets("Enterthedata").Range("C225").Value
        End With
         wbShare.Save
       
        With formBook
                i = .Worksheets("Enterthedata").Range("C225").Value
        End With
        With formBook.Worksheets("Template")
                Set rs = .Range(.Range("A2"), .Range("AC" & i + 1))
        End With
                Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                        If formBook.Worksheets("Enterthedata").Range("C225") = True Then
                        End If
        With formBook
                i = formBook.Sheets("Enterthedata").Range("C225").Value
        End With
        
        If formBook.Worksheets("Enterthedata").Range("B204") = "" Then
                MsgBox "Your data is empty. Fill your data and click record button again."
            Exit Sub
        End If
         rs.Copy: rt.PasteSpecial xlPasteValues
         wbShare.Save
        formBook.Save
        formBook.Activate
        Range("D2").Select
        Application.CutCopyMode = False
        formBook.Sheets("Enterthedata").Range("D2,B204:B220,D204:D220,D222, E204:F220,O204,N204:N220").ClearContents
        Application.ScreenUpdating = True
End Sub

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Mar 20, 2014 7:06 pm
by snasui
:D ช่วยแนบไฟล์ตัวอย่างและแจ้งมาว่าบรรทัดใดไม่ทำงานหรือมีปัญหาทำงานไม่ถูกต้อง จะได้เข้าถึงปัญหาได้โดยไวครับ