: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

วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

ฟอรัมถาม-ตอบเกี่ยวกับ Visual Basic
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
H.Suraseth
Member
Member
Posts: 12
Joined: Sun Jan 05, 2014 11:37 am

วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#1

Post by H.Suraseth »

เนื่องจาก ตอนนี้กระผมสามารถ Update ข้อมูลลง Excel ได้แล้วครับ
แต่กระผมต้องการ เลือก Sheet ที่ต้องการจะ Update เช่น

ข้อมูลชุดที่ 1 แสดงใน Sheet1 ของ Excel
ข้อมูลชุดที่ 2 แสดงใน Sheet3 ของ Excel เดี่ยวกัน

ตัวอย่าง Code VB ครับ

Code: Select all

 'เมื่อผู้ใช้กดปุ่ม "แสดงใน Excel"
    Private Sub btnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcel.Click
        Dim table As DataTable = dgvDataOutput1.DataSource  '-- ข้อมูลชุดที่ 1
        Dim tabae2 As DataTable = dgvDataOutput2.DataSource  '--ข้อมูลชุดที่ 2
        Dim headers() As String = {"ลำดับ", "สถานที่ส่งสินค้า", "ประเภทการขออนุมัติ", "จำนวนส่ง (เที่ยว)", "จำนวนตรวจสอบเที่ยว", "ผลต่าง", "ผู้ตรวจสอบ"}

        Dim oXL As Excel.Application
        Dim wbook As Excel.Workbook
        Dim wsheet As Excel.Worksheet

        Dim wRng As Excel.Range

        oXL = CreateObject("Excel.Application")
        wbook = oXL.Workbooks.Add
        wsheet = wbook.ActiveSheet
        oXL.Visible = True
        oXL.UserControl = True

        Dim title As String = "เรื่อง สรุปเศษวัสดุนำออกพื้นที่โรงงาน"
        Dim product As String = "ชื่อสินค้า " & cbProduct.Text
        Dim dmy As String

        If _StrDate = _EndDate Then
            dmy = "ประจำวันที่ " & _StrDate & " "
        Else
            dmy = "ประจำวันที่ " & _StrDate & " ถึง " & _EndDate & " "
        End If

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความไตเติล ที่รับเข้ามา
        With wsheet.Range("B2", "H2")
            .Merge()
            .Value = title
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความวันที่ ที่รับเข้ามา
        With wsheet.Range("B3", "H3")
            .Merge()
            .Value = dmy & product
            .Interior.ColorIndex = 36       '-- เติมสีภายในของส่วนหัว
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ให้แถวแรกขอตาราง Excel แสดงชื่อคอลัมน์โดยชื่อคอลัมน์นี้จะอ่านจากตารางใน Dataset
        For i = 0 To table.Columns.Count - 1
            '--แถวแรกใน Excel มีลำดับเป็น 1 คงที่เพราะเป็นแถวเดียวกัน
            '--ส่วนลำดับคอลัมน์จะเริ่มจาก 1 แล้วเพิ่มขึ้นเพราะเราอ่านคอลัมน์ถัดไปเรื่อยๆ
            wsheet.Cells(4, i + 2) = headers(i)
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        Next

        With wsheet.Range("B4", "H4")
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        '--วนลูปตามจำนวนแถวใน DataSet
        For r = 0 To table.Rows.Count - 1
            '--อ่านข้อมูลจากแต่ละคอลัมน์
            For c = 0 To table.Columns.Count - 1
                '--เริ่มเขียนจากแถวที่ 2 คอลัมน์ที่ 1 
                wsheet.Cells(r + 5, c + 2) = table.Rows(r)(c)
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
            Next
        Next

        With wsheet.Columns("B")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        With wsheet.Columns("D")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        With wsheet.Columns("E")
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        wRng = wsheet.Range("B4", "H4")
        wRng.EntireColumn.AutoFit()

        wRng = Nothing
        wsheet = Nothing
        wbook = Nothing
        oXL = Nothing
    End Sub
ขอบคุณครับผม
User avatar
snasui
Site Admin
Site Admin
Posts: 30763
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#2

Post by snasui »

:D การเลือกชีทสามารถใช้ Code ตามด้านล่างครับ

Code: Select all

'other code
'Activate sheet1
wbook.sheets(1).activate
'other code
'Activate sheet2
wbook.sheets(2).activate
'other code
กระทู้นี้ผมย้ายมาจาก Excel มาไว้ที่ Other เนื่องจากเห็นว่าเป็นการเขียนด้วย VB ไม่ใช่ VBA ใน Excel

สำหรับการปรับ Code ให้แสดงเป็น Code ดูตัวอย่างจากที่นี่ครับ viewtopic.php?f=3&t=1187
H.Suraseth
Member
Member
Posts: 12
Joined: Sun Jan 05, 2014 11:37 am

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#3

Post by H.Suraseth »

ครับ ขอบคุณมากครับท่านอาจารย์

ผมมือใหม่ หัดโพสตื ต้องขอโทษ ด้วยครับ
H.Suraseth
Member
Member
Posts: 12
Joined: Sun Jan 05, 2014 11:37 am

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#4

Post by H.Suraseth »

ขอโทษนะครับ

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

ผมควรเรียกใช้คำสั่งตอนไหน ช่วงไหนครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30763
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#5

Post by snasui »

:D แนบ Code ที่ปรับแล้วมาด้วยจะได้เห็นว่าแทรก Code เข้าไปในช่วงใดครับ
H.Suraseth
Member
Member
Posts: 12
Joined: Sun Jan 05, 2014 11:37 am

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#6

Post by H.Suraseth »

Code program VB ครับ

Code: Select all

Private Sub btnExcelSheet1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcelSheet1.Click
        Dim table As DataTable = dgvDataOutput1.DataSource  '-- ข้อมูลชุดที่ 1
        'Dim tabae2 As DataTable = dgvDataOutput2.DataSource  '--ข้อมูลชุดที่ 2
        Dim headers() As String = {"ลำดับ", "สถานที่ส่งสินค้า", "ประเภทการขออนุมัติ", "จำนวนส่ง (เที่ยว)", "จำนวนตรวจสอบเที่ยว", "ผลต่าง", "ผู้ตรวจสอบ"}

        Dim oXL As Excel.Application
        Dim wbook As Excel.Workbook
        Dim wsheet As Excel.Worksheet

        Dim wRng As Excel.Range

        oXL = CreateObject("Excel.Application")
        wbook = oXL.Workbooks.Add

[b]        '-------------------------------------------------
        'other code
        'Activate sheet1
        'wbook.Sheets(1).activate()    
        'wsheet = wbook.Sheets(2).           '-- ตรงส่วนนี้ครับอาจารย์ จะใช้เป็นการตั้งค่า Sheet ที่ต้องการ Activate แต่เมื่อพิม์ "." ไม่มีคำสั่ง "activate()" ในการเรียกใช้คำสั่งเลยครับ
        '----------------------------------------------------[/b]

        wsheet = wbook.ActiveSheet

        oXL.Visible = True
        oXL.UserControl = True

        Dim title As String = "เรื่อง สรุปเศษวัสดุนำออกพื้นที่โรงงาน"
        Dim product As String = "ชื่อสินค้า " & cbProduct.Text
        Dim dmy As String

        If _StrDate = _EndDate Then
            dmy = "วันที่ " & _StrDate & " "
        Else
            dmy = "วันที่ " & _StrDate & " ถึง " & _EndDate & " "
        End If

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความไตเติล ที่รับเข้ามา
        With wsheet.Range("B2", "H2")
            .Merge()
            .Value = title
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ยุบเซลล์ของแถวแรกแล้วแสดงข้อความวันที่ ที่รับเข้ามา
        With wsheet.Range("B3", "H3")
            .Merge()
            .Value = dmy & product
            .Interior.ColorIndex = 36       '-- เติมสีภายในของส่วนหัว
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
            .Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            .Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        End With

        '--ให้แถวแรกขอตาราง Excel แสดงชื่อคอลัมน์โดยชื่อคอลัมน์นี้จะอ่านจากตารางใน Dataset
        For i = 0 To table.Columns.Count - 1
            '--แถวแรกใน Excel มีลำดับเป็น 1 คงที่เพราะเป็นแถวเดียวกัน
            '--ส่วนลำดับคอลัมน์จะเริ่มจาก 1 แล้วเพิ่มขึ้นเพราะเราอ่านคอลัมน์ถัดไปเรื่อยๆ
            wsheet.Cells(4, i + 2) = headers(i)
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
            wsheet.Cells(4, i + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
        Next

        With wsheet.Range("B4", "H4")
            .Font.Bold = True
            .VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
            .HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter
        End With

        '--วนลูปตามจำนวนแถวใน DataSet
        For r = 0 To table.Rows.Count - 1
            '--อ่านข้อมูลจากแต่ละคอลัมน์
            For c = 0 To table.Columns.Count - 1
                '--เริ่มเขียนจากแถวที่ 2 คอลัมน์ที่ 1 
                wsheet.Cells(r + 5, c + 2) = table.Rows(r)(c)
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
                wsheet.Cells(r + 5, c + 2).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
            Next
        Next
    End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30763
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#7

Post by snasui »

:D จาก Code เดิม wbook = oXL.Workbooks.Add หมายถึงกำหนดให้ wbook คือ Workbook ที่เพิ่มเข้ามาใหม่

เมื่อเพิ่มเข้ามาใหม่จะมี Sheet เข้ามาให้ทันทีอยู่แล้ว อยู่ที่การกำหนดในโปรแกรม Excel ว่าจะเริ่มต้นด้วยกี่ชีท ปกติค่า Default คือ 3 ชีท

หากต้องการจะไปยัง Sheet1 ของ wbook เราสามารถเขียนได้เป็น

wbook.sheets(1).select เพื่อเลือก Sheet ลำดับที่ 1 ของ wbook หรือ

wbook.sheets(1).activate เพื่อ Active Sheet ลำดับที่ 1 ของ wbook

เมื่อ Active หรือ Select ขึ้นมาแล้วก็สามารถที่จะเขียน Code เพื่อจัดการกับชีทเหล่านั้นได้

การ Active หรือ Select ไม่ได้เป็นสิ่งจำเป็น เราสามารถใช้ตัวแปรเข้ามาเป็น Sheet ใด ๆ ของ wbook ได้ตามต้องการ เช่น

set wsheet = wbook.sheets(1) จากนั้นค่อยเขี่ยน Code เพื่อกระทำกับ wsheet ต่อไป

การให้ตัวแปรกับ Workbook, Worksheet ฯลฯ จะต้องใช้ Set นำหน้าเนื่องจากว่าเป็น Object การ Assign จึงต้องใช้ Set เสมอครับ จะเขียนการ Assign ค่าตัวแปรให้กับ Object ที่เป็น Worksheet เป็นเช่น wsheet = wbook.activesheet ตาม Code ที่แนบมาไม่ได้ครับ
H.Suraseth
Member
Member
Posts: 12
Joined: Sun Jan 05, 2014 11:37 am

Re: วิธี Update ลง Excel โดยเลือก Sheet ที่ต้องการแสดงได้

#8

Post by H.Suraseth »

ได้แล้วครับ ขอบคุณมากๆๆๆๆ ครับ
Post Reply