: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

สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#1

Post by nisit2559 »

คือผมต้องการดึงข้อมูลที่เป็นไฟล์ .csv มาแล้วพอผมเขียนโค้ดให้มันดึงได้แล้วแต่ว่าต้องการดึงทุก1 ชม.มาที่ละสองไฟล์แต่พอมันดึงแล้วช่วงรอ มันจะไม่สามารถทำอย่างอื่นได้เหมือนเครื่องจะค้างแต่ไม่ค้างพอดึงเสร็จก็หายไปทั้งๆที่ CPU ผมก็ I7 ครับแล้วดูในโปรแกรม task manager ก็ใช้ทั้ง ram และ cpu ไม่ถึง 50 %เลยครับจึงอยากจะทราบสาเหตุและวิธีการแก้ไข้ครับ
นี้ครับตัวอย่างโค้ด

Code: Select all

Sub Macro1()
'
' Macro1 Macro
'

'
     Set cell_to = Cells(1, 1)
     Set active_workbook = ActiveWorkbook
     Set active_sheet = ActiveSheet
     Application.DisplayAlerts = False
     File_Path = "D:\MMCT\MMCT\excel\"
     strName = Dir(File_Path & "\" & "*.csv")
     Dim X
     Dim Y
     Dim z
     Y = 2
     X = 2
     Do While strName <> vbNullString
    
        If active_workbook.Name <> strName And strName <> "" Then
            Workbooks.Open Filename:=File_Path & "\" & strName
            Set dataset_workbook = ActiveWorkbook
            Range("Z2:BG31").Select
            RowInc = Selection.Rows.Count
            Selection.Copy
            Windows("workbook1.xlsm").Activate
            Sheets("RawData").Select
            Cells(Y, 2).Select
            ActiveSheet.Paste
            Worksheets("RawData").Cells(X, 1).Value = Now()
            Y = Y + RowInc
            X = X + RowInc
            dataset_workbook.Close
            UserForm1.Hide
            delay 10000
        End If
     strName = Dir
     Loop
     Application.DisplayAlerts = True
     
    End Sub
' Sub Macro2()
ผมทำใน userform ครับเรียกใช้งาน macro1 ครับใช้ 64 bit ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#2

Post by snasui »

:D การทำงานลักษณะนี้จะใช้ Delay หรือใช้การจับเวลาจาก Excel เองแล้วค่อยทำงานมันจะทำให้ Excel ทำงานอยู่ตลอดเวลา เพียงแต่รอคอยเมื่อถึงเวลาที่กำหนดแล้วค่อยทำงานต่อ จึงเป็นอุปสรรคกับการทำงานอย่างอื่น

วิธีที่น่าจะทำได้คือเลือกเปิด Excel มาสองโปรแกรม คือเข้าเมนู Start ของ Windows แล้วเปิดโปรแกรม Excel ขึ้นมาสองรอบ ในรอบแรกเปิดไฟล์โปรแกรมที่ต้องการจับเวลา ส่วนโปรแกรม Excel ที่เปิดรอบหลังใช้สำหรับการทำงานตามปกติเช่นนี้เป็นต้นครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#3

Post by nisit2559 »

แล้วจะต้องเปิด Excel 2 โปรแกรมนีคือต้องเปิดที่เขียน vba เดียวกันใช่ไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#4

Post by snasui »

:D คำวา่เปิด 2 โปรแกรมคือเปิด Excel 2 รอบ จะได้ Excel 2 โปแกรม หากเป็น 100 รอบก็จะได้ Excel 100 โปรแกรม คนละอย่างกับเปิด 2 ไฟล์และ 100 ไฟล์ ทั้งสองโปรแกรมจะเปิดไฟล์เดียวกันหรือไม่ก็ดูตามความจำเป็น ปกติถ้าไฟล์ใดเปิดอยู่แล้ว ถ้าเปิดซ้ำมันก็จะฟ้องว่าเปิดอยู่แล้วและสามารถเปิดซ้ำอีกได้

ถ้าหากเปิดโปรแกรม 2 โปรแกรม โดยทั้ง 2 โปรแกรมเปิดไฟล์จับเวลามันก็จะจับเวลาทั้ง 2 โปรแกรม ก็จะค้างทั้ง 2 โปรแกรมเพื่อรอคอย ในเมื่อเปิด 2 โปรแกรมแล้วก็ควรทำงานคนละงานกันไปในแต่ละโปรแกรม เช่น โปรแกรมแรกเปิดไฟล์ทำงาน 100 ไฟล์ โปรแกรมที่สองเปิดเฉพาะไฟล์ที่เป็น VBA ให้ทำงานตามรอบเวลาที่กำหนด เช่นนี้เป็นต้น วิธีเปิดหลายโปรแกรมอ่านจากที่ผมโพสต์ไว้ใน #2 :roll: ครับ

หากไม่เช่นนั้นก็ต้องตั้ง Job ด้วย Windows เพื่อให้เปิดโปรแกรมและทำงานตามระยะเวลาที่กำหนด ลักษณะงานเช่นนี้ต้องทำ 2 ที่คือ Job และ Code สำหรับทำงานโดยไม่ต้องเขียนส่วนที่เกี่ยวกับการตั้งเวลา เมื่อ Job ทำงานก็จะเกิดการเปิดไฟล์โปรแกรม เมื่อไฟล์ถูกเปิด Code จะทำงาน เมื่อทำงานแล้วก็ปิดไฟล์ วนเช่นนี้ไปเรื่อย ๆ

การตั้ง Job เข้าเมนู Start > Taks Schedule > Action > Create Task ซึ่งจะไม่ขอลงในรายลเอียดเนื่องจากไม่ใช่ Scope ของ Excel ครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#5

Post by nisit2559 »

ขอบคุณครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#6

Post by nisit2559 »

ผมลองทำตามแล้วครับแยกเปิด2โปรแกรมแต่ก็ยังค้างอยู่ครับแต่ค้างเฉพาะ excel นะครับแต่โปรแกรมอื่นใช้ได้ตามปกติครับมีรูปตัวอย่างในไฟล์แนบครับ
IMG_0817[1].png
IMG_0818[1].png
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#7

Post by snasui »

:D ภาพเล็กมาก มองไม่ออกว่าเป็นสองโปรแกรม กรณียังติดปัญหาลองใช้วิธีตั้ง Job แทนครับ

ผมทดสอบกับไฟล์จับเวลาโดยเปิดโปรแกรมมาสองโปรแกรม โปรแกรมแรกเปิดไฟล์จับเวลา โปรแกรมที่สองเปิดไฟล์ทำงานตามปกติ พบว่าสามารถทำงานได้ ในขณะทำงานไฟล์จับเวลายังเดินต่อเนื่อง ซึ่งโดยปกติทั่วไปหากเปิดด้วยโปรแกรมเดียวกัน เมื่อ Edit Cell ใด ๆ เซลล์ที่แสดงเวลาจะหยุดนิ่งจนกว่าแก้ไขเสร็จแล้ว Enter เวลาจึงจะเดินต่อ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#8

Post by nisit2559 »

รูปใหม่ครับ แล้วถ้าจะรันเป็น job นี้ต้องทำอย่างไรบ้างครับ
IMG_0819[1].jpg
IMG_0820[1].jpg
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#9

Post by snasui »

:D เข้าใจว่าเป็นที่ Version ของ Excel ซึ่งตั้งแต่ 2013 เป็นต้นไปจะมีการจัดการใหม่ เปิดหลายโปรแกรมก็กลายเป็นโปรแกรมเดียวกัน สามารถคัดลอกข้อมูลระหว่างกันได้ตามปกติ ซึ่งใน Version 2010 ลงไปไม่สามารถทำได้

กรณีตั้ง Job เป้นสิ่งที่นอกเหนือ Scope ของ Excel ลอง Search จาก Google หรือ Youtube แล้วทำมาเองก่อน ติดแล้วค่อยถามกันต่อ แต่จะเป็นหมวด Other ไม่ใช่หมวด Excel นี้ ซึ่งเราสามารถตั้ง Job ให้โปรแกรมใด ๆ ทำงานก็ได้ตามต้องการครับ

ความรู้เกี่ยวกับ Task Schedule ครับ :arrow: Windows Task Schedule
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#10

Post by nisit2559 »

ขอบคุณครับงั้นเดียวผมไปศึกษามาแล้วถ้าติดจะมาถามครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#11

Post by nisit2559 »

ผมทำได้แล้วครับแต่จะให้มันเปิดไฟล์ใหม่ได้อย่างไรครับหรือต้องไปสั่งให้มันเปิดทุกวันครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#12

Post by snasui »

:D การตั้ง Job สามารถตั้งให้ทำงานเป็นรายระยะเวลาได้ตามต้องการ ไม่ว่าจะราย วัน รายชม. ฯลฯ แต่การที่มันจะทำงานได้ เครื่องที่ตั้ง Job ไว้จะต้องเปิดอยู่เสมอ่ครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#13

Post by nisit2559 »

คือว่าผมต้องการดึงข้อมูลใหม่ตลอด ผมอยากจะทราบว่าเมื่อเปิดไฟล์มาแล้วต้องเขียน VBA อย่างไรให้มันดึงข้อมูลที่เปิดครับโดยชื่อไฟล์จะไม่ซ้ำกันครับ
User avatar
logic
Gold
Gold
Posts: 1506
Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#14

Post by logic »

การใช้ VBA คุณ nisit2559 กรุณาช่วยเขียนมาก่อน เพื่อสมาชิกจึงพอจะช่วยเหลือได้ เป็นกฎของบอร์ดที่ต้องเขียนกันมาเองเสียก่อนครับ :)
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#15

Post by nisit2559 »

เขียนแล้วครับ

Code: Select all

Sub Macro1()
'
' Macro1 Macro
'

'
     Set cell_to = Cells(1, 1)
     Set active_workbook = ActiveWorkbook
     Set active_sheet = ActiveSheet
     Application.DisplayAlerts = False
     File_Path = "D:\MMCT\MMCT\excel\"
     strName = Dir(File_Path & "\" & "*.csv")
     Dim X
     Dim Y
     Dim z
     Y = 2
     X = 2
     Do While strName <> vbNullString
    
        If active_workbook.Name <> strName And strName <> "" Then
            Workbooks.Open Filename:=File_Path & "\" & strName
            Set dataset_workbook = ActiveWorkbook
            Range("Z2:BG31").Select
            RowInc = Selection.Rows.Count
            Selection.Copy
            Windows("workbook1.xlsm").Activate
            Sheets("RawData").Select
            Cells(Y, 2).Select
            ActiveSheet.Paste
            Worksheets("RawData").Cells(X, 1).Value = Now()
            Y = Y + RowInc
            X = X + RowInc
            dataset_workbook.Close
            UserForm1.Hide
            delay 10000
        End If
     strName = Dir
     Loop
     Application.DisplayAlerts = True
     
    End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#16

Post by snasui »

:D Code ที่เขียนมามัน Loop ทุกไฟล์ซึ่งไม่น่าจะซ้ำกันได้อยู่แล้ว

ช่วยลำดับปัญหาที่เป็นมาอีกรอบว่าเป็นปัญหาตรงไหน อย่างไร จะได้เข้าใจตรงกันครับ
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#17

Post by nisit2559 »

โค้ดของพอมันวนลูปเพื่อเปิดไฟล์แล้วมันจะต้องมีตัวนับเวลาเพื่อเป็นดีเลย์แล้วมันค้างครับผมเลยจะเปลี่ยนไปใช้ job ตามที่อาจารย์บอกแล้วที่นี้ผมอยากจะทราบว่าเมื่อใช้ job เปิดไฟล์แทน VBA แล้วจต้องแก้ไขโค้ดที่ใช้ในการก็อบปี้ไฟล์แล้ววางอย่างไรครับ และใน job นี้เราต้องตั้งให้เปิดไฟล์ทุกครั้งเลยใช่ไหมครับหรือเราสามารถตั้งให้มันวนลูปเปิดไฟล์เองได้หรือไม่ครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#18

Post by snasui »

:D เรื่องการ Delay ให้ลบทิ้งไป ไม่จำเป็นต้องใช้เพราะใช้ Job ในการจัดการ เมื่อถึงเวลา Job จะเปิดไฟล์นี้เอง เมื่อไฟล์นี้ถูกเปิด Code จะทำงานอัตโนมัติ

การให้ Code ทำงานอัตโนมัติจะต้องเขียน Code เพิ่มโดยใช้ Event ที่ชื่อว่า Workbook_Open (Double Click ที่ ThisWorkbook ใน VBA Project ที่ ComboBox Object เลือก Workbook > ที่ ComboBox Procedure เลือก Open) ให้เขียน Code เรียก Code ที่ สำหรับการเปิดไฟล์ไว้ที่ Procedure นี้ดูตัวอย่างตามภาพด้านล่าง
WBOpen.png
ส่วน Job กำหนดให้เปิดไฟล์ในเวลาใดก็ได้ มีความถี่เท่าไรก็ได้แล้วแต่ต้องการ สิ่งสำคัญเมื่อเปิดไฟล์มาแล้ว ไฟล์ทำงานเรียบร้อยแล้ว ให้เขียน Code สำหรับปิดไฟล์เอาไว้ด้วย Job ที่กำหนดไว้จะได้ไม่เปิดไฟล์ซ้ำ ๆ จนเกินความจำเป็นครับ
You do not have the required permissions to view the files attached to this post.
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#19

Post by nisit2559 »

ขอสอบถามเพิ่มนะครับจากโค้ดผมพอมันเปิดโปรแกรมมารอบสองมันก็ยังไปดึงไฟล์ข้อมูลเก่าครับ ควรจะแก้โค้ดอย่างไรให้ไม่สามรถดึงข้อมูลเก่าได้ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30736
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเกี่ยวกับโค้ดดึงข้อมูลครับ

#20

Post by snasui »

:D หากไม่ต้องการให้ดึงไฟล์เดิมก็ต้องเขียน Code เพิ่มโดยเก็บข้อมูลไฟล์ที่ดึงเอาไว้แล้วไว้ที่ใดสักที่ ยกตัวอย่างเช่น เก็บไว้ที่ Sheet1 เมื่อมีการดึงใหม่ก็ให้ตรวจสอบกับข้อมูลใน Sheet1 ว่ามีหรือไม่ หากมีก็ให้ข้ามไป เช่นนี้เป็นต้นครับ
Post Reply