: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

ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#13

by natthaporn » Wed Jan 23, 2013 2:47 pm

ได้ผลลัพธ์ตามที่ต้องการแล้วคะ ต้องขอขอบคุณอาจารย์มากคะ อาจารย์ให้คำแนะนำที่มีประโยชน์ ทำให้ดิฉันเข้าใจมากขึ้นว่าถ้า code เกิดปัญหา จะต้องปรับอย่างไร และดิฉันคิดว่าผู้ที่เข้ามาสอบถามปัญหาคงจะมีความเห็นแบบเดียวกันกับดิฉัน
ขอบคุณมากคะ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#12

by snasui » Wed Jan 23, 2013 1:26 pm

:D ดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub RecordTPA_Click()
    'ActiveSheet.Range("STPAValue").Select
    'Selection.ClearContents
    
    Range("TPASort").Select
    ActiveWorkbook.Worksheets("Data-TPA").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Data-TPA").Sort.SortFields.Add Key:=Range( _
        "TTPASection"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Data-TPA").Sort
        .SetRange Range("TPASort")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    ActiveSheet.Range("TTPA7") = "=TPARegion2"
    ActiveSheet.Range("TTPA1") = "=TPATRIM1"
    ActiveSheet.Range("TTPA3") = "=TPARevSection"
    ActiveSheet.Range("TTPA2") = "=TPAVLOOKUP1"
    ActiveSheet.Range("TTPA5") = "=TPAVLOOKUP2"
    ActiveSheet.Range("TTPA6") = "=TPATRIM2"
    
    On Error Resume Next '1. Add this line
    ActiveSheet.ShowAllData '2. Add this line
    ActiveSheet.Range("TTPA3").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
        
    ActiveSheet.Range("STPAValue").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    '3. Correctness "If statement"
    If ActiveSheet.Range("TPARegion") = "CENTRAL" Then
        If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "c") = 0 Then
            MsgBox "Can't found ""CENTRAL"" in your data."
            Exit Sub
        Else
            Range("TPAFilter").Select
            Selection.AutoFilter
            ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=c", _
            Operator:=xlAnd
        End If
    End If

    If ActiveSheet.Range("TPARegion") = "NORTH" Then
        If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "n") = 0 Then
            MsgBox "Can't found ""NORTH"" in your data."
            Exit Sub
        Else
            Range("TPAFilter").Select
            Selection.AutoFilter
            ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=n", _
            Operator:=xlAnd
        End If
    End If

    If ActiveSheet.Range("TPARegion") = "NORTHEAST" Then
        If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "ne") = 0 Then
            MsgBox "Can't found ""NORTHEAST"" in your data."
            Exit Sub
        Else
            Range("TPAFilter").Select
            Selection.AutoFilter
            ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=ne", _
            Operator:=xlAnd
        End If
    End If

    If ActiveSheet.Range("TPARegion") = "EAST" Then
        If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "e") = 0 Then
            MsgBox "Can't found ""EAST"" in your data."
            Exit Sub
        Else
            Range("TPAFilter").Select
            Selection.AutoFilter
            ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=e", _
            Operator:=xlAnd
        End If
    End If

    If ActiveSheet.Range("TPARegion") = "SOUTH" Then
        If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "s") = 0 Then
            MsgBox "Can't found ""SOUTH"" in your data."
            Exit Sub
        Else
            Range("TPAFilter").Select
            Selection.AutoFilter
            ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=s", _
            Operator:=xlAnd
        End If
    End If
    
   Application.Goto Reference:="STPAAC"
    Selection.Copy
    Application.Goto Reference:="TTPAAC"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAAC"
    
    Application.Goto Reference:="STPAAE"
    Selection.Copy
    Application.Goto Reference:="TTPAAE"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAAE"
    
    Application.Goto Reference:="STPACB"
    Selection.Copy
    Application.Goto Reference:="TTPACB"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPACB"
    
    Application.Goto Reference:="STPAPMA"
    Selection.Copy
    Application.Goto Reference:="TTPAPMA"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAPMA"
    
    Application.Goto Reference:="STPADT"
    Selection.Copy
    Application.Goto Reference:="TTPADT"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPADT"
    
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Range("D2").Select
    Application.ScreenUpdating = True

End Sub

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#11

by natthaporn » Wed Jan 23, 2013 12:38 pm

ก่อนอื่นดิฉนต้องขอโทษด้วยที่รบกวนอาจารย์บ่อยมากเลยคะ ดิฉันมีประเด็นเกิดขึ้นอีกแล้วคะ พยายามแก้ code และหาสาเหตุตั้งแต่เช้าแล้วแต่ก็หาไม่พบ ประเด็นมีดังนี้คะ
ที่ sheet "Data-TPA" เมื่อเลือก "CENTRAL","NORTHEAST","EAST" ที่ cell E2 ข้อมูลที่ส่งมาที่ sheet ต่างๆ เหล่านี้ เป็นข้อมูลชุดเดียวกัน คือเป็นข้อมูลของ "SOUTH" แต่พอเลือก "SOUTH" ข้อมูลที่ปรากฎที่ sheet "SOUTH" กลายเป็นข้อมูลของ "EAST"

ดิฉันขอรบกวนอาจารย์ชี้แนะด้วยคะ code มีดังนี้คะ

Code: Select all

Private Sub RecordTPA_Click()
   'ActiveSheet.Range("STPAValue").Select
    'Selection.ClearContents
    
     Range("TPASort").Select
    ActiveWorkbook.Worksheets("Data-TPA").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Data-TPA").Sort.SortFields.Add Key:=Range( _
        "TTPASection"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Data-TPA").Sort
        .SetRange Range("TPASort")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    ActiveSheet.Range("TTPA7") = "=TPARegion2"
    ActiveSheet.Range("TTPA1") = "=TPATRIM1"
    ActiveSheet.Range("TTPA3") = "=TPARevSection"
    ActiveSheet.Range("TTPA2") = "=TPAVLOOKUP1"
    ActiveSheet.Range("TTPA5") = "=TPAVLOOKUP2"
    ActiveSheet.Range("TTPA6") = "=TPATRIM2"

    ActiveSheet.Range("TTPA3").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
        
    ActiveSheet.Range("STPAValue").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False

     If ActiveSheet.Range("TPARegion") = "CENTRAL" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "c") = 0 Then
    MsgBox "Can't found ""CENTRAL"" in your data."
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Exit Sub
    End If
    Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=c", _
    Operator:=xlAnd
    End If

    If ActiveSheet.Range("TPARegion") = "NORTH" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "n") = 0 Then
    MsgBox "Can't found ""NORTH"" in your data."
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Exit Sub
    End If
    Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=n", _
    Operator:=xlAnd
    End If

    If ActiveSheet.Range("TPARegion") = "NORTHEAST" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "ne") = 0 Then
    MsgBox "Can't found ""NORTHEAST"" in your data."
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Exit Sub
    End If
    Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=ne", _
    Operator:=xlAnd
    End If

    If ActiveSheet.Range("TPARegion") = "EAST" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "e") = 0 Then
    MsgBox "Can't found ""EAST"" in your data."
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Exit Sub
    End If
    Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=e", _
    Operator:=xlAnd
    End If

    If ActiveSheet.Range("TPARegion") = "SOUTH" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "s") = 0 Then
    MsgBox "Can't found ""SOUTH"" in your data."
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Exit Sub
    End If
    Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=s", _
    Operator:=xlAnd
    End If

    
   Application.Goto Reference:="STPAAC"
    Selection.Copy
    Application.Goto Reference:="TTPAAC"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAAC"
    
    Application.Goto Reference:="STPAAE"
    Selection.Copy
    Application.Goto Reference:="TTPAAE"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAAE"
    
    Application.Goto Reference:="STPACB"
    Selection.Copy
    Application.Goto Reference:="TTPACB"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPACB"
    
    Application.Goto Reference:="STPAPMA"
    Selection.Copy
    Application.Goto Reference:="TTPAPMA"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPAPMA"
    
    Application.Goto Reference:="STPADT"
    Selection.Copy
    Application.Goto Reference:="TTPADT"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="STPADT"
    
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1
    Selection.AutoFilter
    Range("D2").Select
    Application.ScreenUpdating = True

End Sub

Attachments
VBASendData4.xlsm
(256.95 KiB) Downloaded 28 times

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#10

by natthaporn » Wed Jan 23, 2013 10:18 am

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

ต้องขอขอบคุณอาจารย์เป็นอย่างมากอึกครั้งคะ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#9

by snasui » Tue Jan 22, 2013 11:32 pm

:D ลองใช้

Code: Select all

On Error Resume Next
เข้ามาช่วยโดยวางไว้บรรทัดบนก่อน Statement อื่น ๆ ครับ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#8

by natthaporn » Tue Jan 22, 2013 11:19 pm

อาจารย์คิ ดิฉันได้ทำข้อมูลต่อยอดมาถึง sheet "TOTAL" ซึ่งต้อง copy ข้อมูลมาจาก sheet "CENTRAL-R","NORTH-R", .... โดยดิฉันได้เขียน code ดังนี้คะ

Code: Select all

Private Sub CopyData_Click()
ActiveSheet.Range("TOTAL").Select
Selection.ClearContents

    Application.Goto Reference:="CENTRALR"
    Selection.Copy
    Application.Goto Reference:="TGC"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto Reference:="NORTHR"
    Selection.Copy '
    Application.Goto Reference:="TGN" (debug)
    Selection.PasteSpecial Paste:=xlPasteValues
    
   Application.Goto Reference:="NORTHEASTR"
    Selection.Copy
    Application.Goto Reference:="TGNE"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto Reference:="EASTR"
    Selection.Copy
    Application.Goto Reference:="TGE"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto Reference:="SOUTHR"
    Selection.Copy
    Application.Goto Reference:="TGS" (debug)
    Selection.PasteSpecial Paste:=xlPasteValues
   
    Application.CutCopyMode = False
End Sub
ซึ่ง code ดังกล่าวนี้ จะติด debug อยู่ 2 จุด โดยจุด 2 จุด ดังกล่าวเป็น sheet ที่ไม่มีข้อมูลคะ
ดิฉันจึงอยากจะขอรบกวนอาจารย์ช่วยแนะนำด้วยคะ
Attachments
VBASendData3.xlsm
(193.24 KiB) Downloaded 16 times

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#7

by natthaporn » Tue Jan 22, 2013 3:13 pm

ได้ผลลัพธ์ตามที่ต้องการแล้วคะ ขอขอบคุณมาก ๆ สำหรับคำแนะนำคะ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#6

by snasui » Tue Jan 22, 2013 2:02 pm

:D ปรับ Range Name ให้อ้างอิงบรรทัดที่ 3 แทน ยกตัวอย่างเช่น

=OFFSET(INDIRECT('Data-TPA'!$E$2&"!"&"$I$3"),COUNTA(INDIRECT('Data-TPA'!$E$2&"!"&"B:B")),0)

และปรับ Code ให้ตรวจสอบว่าพบรหัสที่ต้องการหรือไม่ หากไม่พบให้ออกจาก Procedure ไม่ต้องดำเนินการต่อ ตัวอย่างตามด้านล่างครับ

Code: Select all

'Other code
If ActiveSheet.Range("TPARegion") = "NORTH" Then
    If Application.CountIf(Sheets("Data-TPA").Range("B:B"), "n") = 0 Then
        MsgBox "Can't found ""NORTH"" in your data."
        Exit Sub
    End If
Else
    Range("TPAFilter").Select
    Selection.AutoFilter
    ActiveSheet.Range("STPAFilter").AutoFilter Field:=1, Criteria1:="=n", _
    Operator:=xlAnd
End If

'Other code

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#5

by natthaporn » Tue Jan 22, 2013 12:50 pm

ดิฉันได้ส่ง file มาให้ใหม่แล้วคะ ปัญหาที่พบมีดังนี้คือ
1. เมื่อส่งข้อมูลมาที่ sheet ที่เป็น target ข้อมูลจะมาอยู่ที่ B8 ซึ่งจริง ๆ แล้วควรจะอยู่ที่ B6
2. ที่ sheet Data-TPA เมื่อเลือก "North" ที่ cell E2 เมื่อ click "Send" แล้วทำไมข้อมูลทั้งหมดถูกส่งมาที่ sheet "North" ในขณะที่ไม่มีข้อมูลของ "North" เลย ดิฉันลอง debug แล้วเลือก run เฉพาะช่วงการ filter แล้ว ซึ่งการทำ filter ก็ถูกต้องแต่ทำไม่ข้อมูลที่ส่งไปจึงไม่ถูกต้องคะ

ขอบคุณคะ
Attachments
VBASendData2.xlsm
(256.86 KiB) Downloaded 27 times

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#4

by snasui » Tue Jan 22, 2013 8:30 am

:D กรณีเป็นไฟล์จริงให้เปลี่ยนข้อมูลสำคัญไปเป็นอย่างอื่นแล้วแนบไฟล์นั้นมาครับ จะได้สะดวกในการตอบมากกว่าไม่เห็นไฟล์ครับ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#3

by natthaporn » Mon Jan 21, 2013 11:53 pm

สูตรและ code ที่อาจารย์ที่แนะนำมา สามารถ run ข้อมูลได้ตามที่ต้องการแล้วคะ เหคุผลที่อาจารย์นำ Target1 มาไว้ run เป็นอันดับสุดท้ายดิฉันเข้าใจว่าเป็นเพราะที่ Source มีข้อมูลของ column B ทุก row เนื่องจากข้อมูลที่ส่งเข้ามาใหม่นั้นจะต้องต่อท้ายข้อมูลที่อยู่ใน column B
ดิฉันมีเรื่องรบกวนถามอาจารย์อีกอย่างหนึ่งคือ เมื่อดิฉันนำ code ดังกล่าวนี้ไปใช้กับ file จริง ข้อมูลที่ปรากฎอยู่ใน Target ทำไมจึงอยู่ที่ row ที่ B8 กล่าวคือ ข้อมูลขยับลงมาอึก 2 row ส่วนข้อมูลชุดต่อไปที่ส่งเข้ามาใหม่ต่อท้ายข้อมูลชุดเดิม ไม่มีปัญหาอะไร
ทั้ง ๆ ที่ file ตัวอย่างและ file จริง Target อยุ๋ที่เดียวกัน คือ B6 ทั้งนี้ดิฉันไม่สามารถที่จะส่ง file จริงให้อาจารย์ดูได้คะ สูตรที่ใช้คือดังนี้คะ

1. Target1 =OFFSET(INDIRECT(Data-TPA!$E$2&"!"&"$B$5"),COUNTA(INDIRECT(Data-TPA!$E$2&"!"&"B:B")),0)
2. Target2 =OFFSET(INDIRECT(Data-TPA!$E$2&"!"&"$I$5"),COUNTA(INDIRECT(Data-TPA!$E$2&"!"&"B:B")),0)
3. Target3 =OFFSET(INDIRECT(Data-TPA!$E$2&"!"&"$T$5"),COUNTA(INDIRECT(Data-TPA!$E$2&"!"&"B:B")),0)
4. Target4 =OFFSET(INDIRECT(Data-TPA!$E$2&"!"&"$AE$5"),COUNTA(INDIRECT(Data-TPA!$E$2&"!"&"B:B")),0)
5. Target5 =OFFSET(INDIRECT(Data-TPA!$E$2&"!"&"$AP$5"),COUNTA(INDIRECT(Data-TPA!$E$2&"!"&"B:B")),0)

รบกวนอาจารย์ช่วยแนะนำด้วยคะ หรือถ้าอาจารย์ต้องการข้อมูลอะไรเพี่มเติม สามารถบอกมาได้เลยคะ

ขอบคุณมากคะ

Re: ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#2

by snasui » Mon Jan 21, 2013 7:28 pm

:D ลองตามนี้ครับ
  1. ปรับ Range Name เป็นตามด้านล่าง ตัวอื่น ๆ คงเดิม
    1. Target1 =OFFSET(INDIRECT(send!$E$2&"!"&"$B$5"),COUNTA(INDIRECT(send!$E$2&"!"&"B:B")),0)
    2. Target2 =OFFSET(INDIRECT(send!$E$2&"!"&"$F$5"),COUNTA(INDIRECT(send!$E$2&"!"&"B:B")),0)
    3. Target3 =OFFSET(INDIRECT(send!$E$2&"!"&"$J$5"),COUNTA(INDIRECT(send!$E$2&"!"&"B:B")),0)
    4. Target4 =OFFSET(INDIRECT(send!$E$2&"!"&"$N$5"),COUNTA(INDIRECT(send!$E$2&"!"&"B:B")),0)
  2. ปรับ Code เป็นตามด้านล่าง สังเกตการลำดับ Code ว่าเรียงใหม่อย่างไร

    Code: Select all

    Private Sub SendData_Click()
    
        If ActiveSheet.Range("E2") = "CEN" Then
        Range("B4:K4").Select
        Selection.AutoFilter
        ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="c"
        End If
        
        If ActiveSheet.Range("E2") = "NUM" Then
        Range("B4:K4").Select
        Selection.AutoFilter
        ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="n"
        End If
        
        If ActiveSheet.Range("E2") = "EDP" Then
        Range("B4:K4").Select
        Selection.AutoFilter
        ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="e"
        End If
        
        
        Application.Goto Reference:="Source2"
        Selection.Copy
        Application.Goto Reference:="Target2"
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.Goto Reference:="Source2"
        
        Application.Goto Reference:="Source3"
        Selection.Copy
        Application.Goto Reference:="Target3"
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.Goto Reference:="Source3"
        
        Application.Goto Reference:="Source4"
        Selection.Copy
        Application.Goto Reference:="Target4"
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.Goto Reference:="Source4"
        
        Application.Goto Reference:="Source1"
        Selection.Copy
        Application.Goto Reference:="Target1"
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.Goto Reference:="Source1"
    
        
        ActiveSheet.Range("B4:K50").AutoFilter Field:=1
        Selection.AutoFilter
        Range("D2").Select
       
    End Sub
    

ขอสอบถาม Code VBA ในการส่งข้อมูลไปยัง sheet อื่น

#1

by natthaporn » Mon Jan 21, 2013 5:45 pm

ดิฉันได้เขียน code สำหรับส่งข้อมูลจาก sheet "send" ไปยัง sheet "CEN",
NUM" และ "EDP" ดังนี้คะ

Code: Select all

Private Sub SendData_Click()

    If ActiveSheet.Range("E2") = "CEN" Then
    Range("B4:K4").Select
    Selection.AutoFilter
    ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="c"
    End If
    
    If ActiveSheet.Range("E2") = "NUM" Then
    Range("B4:K4").Select
    Selection.AutoFilter
    ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="n"
    End If
    
    If ActiveSheet.Range("E2") = "EDP" Then
    Range("B4:K4").Select
    Selection.AutoFilter
    ActiveSheet.Range("B4:K50").AutoFilter Field:=1, Criteria1:="e"
    End If
    
    Application.Goto Reference:="Source1"
    Selection.Copy
    Application.Goto Reference:="Target1"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="Source1"
    
    Application.Goto Reference:="Source2"
    Selection.Copy
    Application.Goto Reference:="Target2"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="Source2"
    
    Application.Goto Reference:="Source3"
    Selection.Copy
    Application.Goto Reference:="Target3"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="Source3"
    
    Application.Goto Reference:="Source4"
    Selection.Copy
    Application.Goto Reference:="Target4"
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.Goto Reference:="Source4"
    
    ActiveSheet.Range("B4:K50").AutoFilter Field:=1
    Selection.AutoFilter
    Range("D2").Select
   
End Sub

ดิฉํนรบกวนสอบถามผู้รู้เกี่ยวกับการเขียน code เพิ่มเติมดังนี้คะ
1. ดิฉันต้องการให้ข้อมูลของชุดถัดไปที่อยู่ใน sheet"send" ไปต่อท้ายข้อมูลเดิม
โดยให้มีเงื่อนไขว่าต้องดูจาก column "B" ของ sheet "CEN",
NUM" และ "EDP" เป็นหลัก คือ ถ้ามีข้อมูลอยู่ที่ colum "B" ให้ข้อมูลชุดถัดไป ต่อท้ายไปเรื่อย ๆ
ซึ่งข้อมูลใน sheet "CEN", NUM" และ "EDP" นอกจากจะถูกส่งไปจาก sheet "send" แล้ว
อาจจะต้องมีการ key in เข้าไปโดยตรง

ขอบคุณคะ
Attachments
VBASendData.xlsm
(53.58 KiB) Downloaded 34 times

Top