: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

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

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: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#19

by zern » Tue Aug 02, 2016 11:24 am

หาก DataType เป็น Integer เช่นที่ผมโพสต์ไป แสดงว่ามีค่าตั้งต้นที่ 0
หาก DataType เป็น String ค่าเริ่มต้นจะเป็น "" เช่นนี้เป็นต้น
อ๋อ ผมก็เดาว่า j น่าจะเริ่มที่ 0 เพราะวิเคราะห์จากผลลัพธ์ที่ได้ ถ้างั้น j ก็น่าจะเป็นแค่การเช็คว่าจะวนลูปกี่รอบ
ใช่ครับเข้าใจยากมาก จะหาใน google ก็ไม่รู้เลยว่าสิ่งที่เจอมันคือสิ่งที่เรากำลังสงสัยหรือเปล่า
แต่ขอบคุณอาจารย์มากครับ ทำให้เห็นโลกของ excel กว้างขึ้นอีกเยอะเลย :shock:

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#18

by snasui » Mon Aug 01, 2016 7:35 pm

zern wrote:ขอกลับมาถามใหม่อีกรอบหน่อยครับ
1. If j = 0 Then
่j=0 เป็นการเช็คอะไรเหรอครับ เพราะผมไม่เจอการประกาศเลยว่า j คืออะไร เจอแต่ j as integer
2. c(0, j - 1) = a(i)
c(0, j - 1) มันคืออะไรเหรอครับ ผมไม่เจอการประกาศ c เช่นกัน เจอแต่ c(0, 2) as variant ไม่เข้าใจว่ามันมีความหมายยังไง
คือผมลองเพิ่ม object เข้าไปแล้วมัน debug น่ะครับ
ถ้าแก้สองโค้ดนี้ออกน่าจะเอาไปปรับใช้ในงานได้ ถึงแม้จะเขียนไม่ได้ แต่ก็พอจะแก้ไขเล็กๆน้อยๆได้น่ะครับ
:D ทุกตัวแปรประกาศตัวแปรไว้เรียบร้อยแล้วครับ

หากปรากฎอยู่ในส่วนของ Dim (ในส่วนที่แจ้งมาว่าไม่เข้าใจ) คือการประกาศตัวแปรทั้งสิ้น การประกาศตัวแปรเป็นการจองหน่วยความจำ เพื่อให้โปรแกรมใช้ Memory เท่าที่จำเป็น ตัวแปรแต่ละชนิดใช้ Memory ไม่เท่ากัน การไม่ประกาศตัวแปร ทุกตัวแปรจะเป็น Variant หากเป็นโปรแกรมขนาดใหญ่จะเกิดปัญหา Memory ไม่พอได้ครับ

ส่วนประกาศแล้วจะ Assign ค่าให้หรือไม่อยู่ที่ความจำเป็น กรณียังไม่ Assign ค่าใดให้ก็ต้องมาดูว่าเป็น DataType ใด การ Assign ค่าจะใช้เครื่องหมาย = โดยกำหนดให้ค่าตัวแปรเท่ากับค่าด้านขวาของตัวแปร

หาก DataType เป็น Integer เช่นที่ผมโพสต์ไป แสดงว่ามีค่าตั้งต้นที่ 0
หาก DataType เป็น String ค่าเริ่มต้นจะเป็น "" เช่นนี้เป็นต้น

ตามด้านบนตัวแปร c เป็น Array จึงประกาศเป็น Variant

Code เหล่านี้ไม่ง่ายนักเพราะไม่ได้เป็น Object ของ Excel อาจจะค้นหาตัวอย่างใน Google ได้น้อยหรืออาจจะไม่มีเลยก็เป็นได้ครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#17

by zern » Mon Aug 01, 2016 5:31 pm

ยังไม่รู้ความหมาย แต่พอจะแกะได้แล้วครับว่า ถ้าจะเพิ่ม object ก็ต้องเปลี่ยนเลขจาก
Resize(1, 2). เป็น Resize(1, 7). และ
c(0, 2) As Variant เป็น c(0, 7) As Variant
เป็นต้น

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#16

by zern » Mon Aug 01, 2016 5:11 pm

ขอกลับมาถามใหม่อีกรอบหน่อยครับ
1. If j = 0 Then
่j=0 เป็นการเช็คอะไรเหรอครับ เพราะผมไม่เจอการประกาศเลยว่า j คืออะไร เจอแต่ j as integer
2. c(0, j - 1) = a(i)
c(0, j - 1) มันคืออะไรเหรอครับ ผมไม่เจอการประกาศ c เช่นกัน เจอแต่ c(0, 2) as variant ไม่เข้าใจว่ามันมีความหมายยังไง
คือผมลองเพิ่ม object เข้าไปแล้วมัน debug น่ะครับ
ถ้าแก้สองโค้ดนี้ออกน่าจะเอาไปปรับใช้ในงานได้ ถึงแม้จะเขียนไม่ได้ แต่ก็พอจะแก้ไขเล็กๆน้อยๆได้น่ะครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#15

by zern » Mon Jul 11, 2016 10:41 am

คงต้องฝึกวิชาอื่นอีกเยอะก่อนถึงจะเข้าใจได้สินะครับ ขอบคุณมากครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#14

by DhitiBank » Sat Jul 09, 2016 5:17 pm

snasui wrote: :D เป็น Object ของ HTML ครับ กรณีนี้ผมเขียนโดยอาศัย Property Window, Locals Window มาช่วยแสดง Properties ของ Object เพื่อให้ทราบว่ามี Properties อะไร เป็น Data Type แบบใด และจะเขียนเพื่อดึงค่าออกมาแสดงได้อย่างไรครับ
:o ขอบคุณครับ เอาเป็นว่าผมพยายามใช้ฟอร์มที่โปรแกรมให้มาแบบเดิมดีกว่า แค่นี้ผมก็คิดว่ายากมากแล้วนะ :flw:

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#13

by snasui » Fri Jul 08, 2016 6:42 pm

DhitiBank wrote: :shock: นี่มัน object อะไรนั่น อาจารย์ครับ ถ้าจะหาคำอธิบายโค้ดเกี่ยวกับ object พวกนี้ ต้องหาอ่านจากไหนครับ

:D เป็น Object ของ HTML ครับ กรณีนี้ผมเขียนโดยอาศัย Property Window, Locals Window มาช่วยแสดง Properties ของ Object เพื่อให้ทราบว่ามี Properties อะไร เป็น Data Type แบบใด และจะเขียนเพื่อดึงค่าออกมาแสดงได้อย่างไรครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#12

by snasui » Fri Jul 08, 2016 4:40 pm

:D ที่แปลมานั้นไม่ถูกต้องครับ

หากจะใช้ Code ลักษณะนี้ซึ่งผมถือว่าเป็นเชิงลึก จะต้องผ่านการศึกษา Object Oriented Programming ของ Excel มาอย่างดี ต้องทราบ Data Type, Array, Function ของ VBA, Function ของ Excel ที่สามารถใช้ใน VBA เป็นต้น

หลักการของ Code นั้นเป็นการดูว่าจากตัวเลือกทั้งหมดที่สามารถมีได้ใน Object นั้นๆ ปัจจุบันรายการใดถูกเลือกอยู่ก็ให้นำออกมาใช้งาน

สำหรับการ Loop ก็เพื่อให้เข้าถึง Object ทุกตัวที่มีชื่อขึ้นต้นว่า "HTML" ครับ

เนื่องจากรายการใน Object เหล่านี้ไม่ได้แยกต่างหากจากกัน แต่เป็นรายการที่เป็นข้อความเดียวแต่แบ่งด้วยเครื่องหมาย ";" จึงต้องแบ่งรายการทั้งหมดให้แยกออกจากกันด้วยเครื่องหมาย ";" แล้วนำไปเก็บในตัวแปร

ท่อนใดของข้อความที่นำมาแสดงจะถูกระบุว่าท่อนนั้นเป็น True เราจึงต้องตรวจสอบว่า True อยู่ในตำแหน่งที่เท่าใดของชุดข้อมูลทั้งหมด แล้วนำลำดับนั้นในตัวแปรมาแสดง เช่นนี้ครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#11

by zern » Fri Jul 08, 2016 11:00 am

Code: Select all

Sub HtmlSelect()
    Dim obj As Object, i As Integer, j As Integer
    Dim a As Variant, b As Variant, c(0, 2) As Variant
    With Sheets(1)
        For Each obj In .Shapes
            If Left(obj.Name, 4) = "HTML" Then
                a = Split(obj.DrawingObject.Object.DisplayValues, ";")                      '1 Display value if Data is value Q:What is ";"
                b = Split(obj.DrawingObject.Object.Selected, ";")                           '2 Detect Object is Selected or Data value Q:What is .selected
                i = Application.Match("True", b, 0) - 1                                     '3 Convert True to 0 false to 1 Q:Why match false not error
                With Sheets("Sheet2")
                    If j = 0 Then                                                           '4 If J is unidentify represent to 0, right?
                        'If .Range("a1") = "" Then                                          'not use
                        .Range("a1").Value = a(i)                                           '5 a is array in object 1, right
                        'Else
                            '.Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Value = a(i)  'not use
                        'End If
                    Else
                        c(0, j - 1) = a(i)
                    End If
                End With
                j = j + 1
            End If
        Next obj
        With Sheets("sheet2")
            .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3).Value = c
        End With
    End With
End Sub
ผมอ่านโค้ดแล้วสรุปมาได้ดังนี้น่ะครับ ใน code ผม note ไว้เป็นภาษาอังกฤษแบบงูๆปลาๆ ในบรรทัดที่สงสัย ผมเลยขออธิบายเป็นไทยไว้ตรงข้างล่างด้วยน่ะครับ
1 ให้แสดงค่า ถ้า object นั้นเป็นแบบ value Q:";" หมายถึงอะไร
2 ตรวจสอบว่า obj นั้นเป็นแบบ selected หรือเปล่า Q: โค้ด .selected มีความหมายว่าอะไร
3 เปลี่ยนค่า b จาก true เป็น 0 และ fase เป็น 1 Q:ทำไม match false แล้วไม่ error แถม -1 แล้วยังกลายเป็น 1 อีก
4 ถ้า J ไม่ได้ระบุค่า ให้แสดงค่า 0 ใช่หรือเปล่า
5 a เป็น array ของ object 1 ใช่หรือเปล่า
และมีบาง code ที่ตัดออกได้ เพราะผมไม่ได้จะเก็บข้อมูลเรียงลงมาน่ะครับ ทำให้โค้ดสั้นลงได้อีกนิด :D
หลังจากข้อ 5 แล้วผมก็ไม่รู้เรื่องจนยังนึกไม่ออกแล้วน่ะครับว่าจะถามยังไงดี :roll:

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#10

by DhitiBank » Fri Jul 08, 2016 9:21 am

:shock: นี่มัน object อะไรนั่น อาจารย์ครับ ถ้าจะหาคำอธิบายโค้ดเกี่ยวกับ object พวกนี้ ต้องหาอ่านจากไหนครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#9

by snasui » Thu Jul 07, 2016 10:31 pm

:D หลักการตอบปัญหาโดยทั่วไป จะตอบที่ง่าย กระชับ รัดกุมและยืดหยุ่น เท่าที่คิดได้ขณะนั้นอยู่แล้วในทุก ๆ กระดานถามตอบไม่ใช่เฉพาะที่นี่ครับ :mrgreen:

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#8

by zern » Thu Jul 07, 2016 10:09 pm

ว่าแต่ไม่มีวิธีอื่นที่ซับซ้อนน้อยกว่านี้แล้วใช่หรือเปล่าครับ เห็นโค้ดก็แอบหนักใจแล้ว

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#7

by zern » Thu Jul 07, 2016 10:00 pm

เอามาจกโปรแกรมการสั่งของของบริษัทน่ะครับ ผมต้องการแปลงข้อมูลให้อยู่ในรูปเอกเซล และนำไปใช้ต่อไป ทีนี้มัน export ออกมาได้แค่ pdf กับ html ผมเลยเลือก html แล้วนำมาเปิดโดยใช้ vba และดึงข้อมูลมา
ซึ่งข้อมูลก็มีครบถ้วนทุกอย่างที่ผมต้องการ ขาดแค่ ชื่อสาขา และวันที่ส่งสินค้าที่อยู่ในกล่องแบบนั้น ผมอยากให้มันอัตโนมัติเลยโดยคนไม่ต้องทำการคีย์ข้อมูลใดๆเพิ่มทั้งสิ้น จึงมาสอบถามดูว่ามีวิธีอื่นหรือไม่น่ะครับ

ว่าแต่ไม่คิดเลยว่าโค้ดจะซับซ้อนขนาดนี้ มีโค้ดที่ไม่เคยใช้ตั้งเยอะ พรุ่งนี้จะลองไปทำดูครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#6

by snasui » Thu Jul 07, 2016 8:27 pm

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

Code: Select all

Sub HtmlSelect()
    'Sheets("Sheet2").Range("A1") = Shapes.Range(Array("HTMLSelect1")).Value
    Dim obj As Object, i As Integer, j As Integer
    Dim a As Variant, b As Variant, c(0, 2) As Variant
    With Sheets(1)
        For Each obj In .Shapes
            If Left(obj.Name, 4) = "HTML" Then
                a = Split(obj.DrawingObject.Object.DisplayValues, ";")
                b = Split(obj.DrawingObject.Object.Selected, ";")
                i = Application.Match("True", b, 0) - 1
                With Sheets("Sheet2")
                    If j = 0 Then
                        If .Range("a1") = "" Then
                            .Range("a1").Value = a(i)
                        Else
                            .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Value = a(i)
                        End If
                    Else
                        c(0, j - 1) = a(i)
                    End If
                End With
                j = j + 1
            End If
        Next obj
        With Sheets("sheet2")
            .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3).Value = c
        End With
    End With
End Sub
กรณีนี้จะเห็นว่ายุ่งยากกว่าการใช้ ComboBox ที่เป็น Form Control หรือ ActiveX Control

ช่วยตอบว่านำมาจากที่ใดและเหตุใดจึงใช้ Control แบบนี้โดยไม่เลือกใช้ Form Control หรือ ActiveX Control ครับ :?:

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#5

by zern » Thu Jul 07, 2016 3:18 pm

แนบไฟล์ .xlsm เพิ่มให้ทั้่งในโพสนี้แล้วนะครับ
Attachments
ปัญหาไฟล์ QSR.xlsm
(28.08 KiB) Downloaded 19 times

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#4

by DhitiBank » Thu Jul 07, 2016 2:50 pm

ลองแนบไฟล์ที่มี object และโค้ดที่ได้ลองเขียนแล้วมาในกระทู้เลยครับ อาจารย์และเพื่อนๆ จะได้ช่วยแนะนำได้สะดวกครับ :)

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#3

by zern » Thu Jul 07, 2016 1:58 pm

ถ้าดูจากลิงค์ที่คุณ Dhitibank ให้มาแล้ว คิดว่าน่าจะเป็น
Sub HtmlSelect()
sheets("Sheet2").Range("A1") = Shapes.Range(Array("HTMLSelect1")).Value
End Sub
แต่มันไม่ใช่ คือไม่รู้ว่าการเลือกค่าในกล่องเหล่านี้ต้องใช้คำสั่งอะไรน่ะครับ

Re: ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#2

by DhitiBank » Thu Jul 07, 2016 1:21 pm

ก็ต้องตามกฎข้อ 5 ด้านบนครับ หากเป็น VBA ต้องลองเขียนมาเองก่อน :)

ลองดูตัวอย่างคร่าวๆ ที่ลิ้งค์ด้านล่างครับ
Store combo box's value to cell

ต้องการ copy ข้อมูลจาก field นี้ไปยังตารางเอกเซลด้วย VBA ต้องทำยังไงครับ

#1

by zern » Thu Jul 07, 2016 11:01 am

ปัญหาไฟล์ QSR.xlsx
(20.75 KiB) Downloaded 17 times
Attachments
ปัญหา QSR.jpg
ปัญหา QSR.jpg (76.88 KiB) Viewed 404 times

Top