:!: โปรดทราบ Image
    1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ดครับ Image
    2. การสมัครสมาชิกเพื่อโพสต์คำถาม ดาวน์โหลดไฟล์แนบไปศึกษา ทำตามขั้นตอนด้านล่างครับ
      1. สมัครสมาชิก ดูขั้นตอนตาม Link นี้ครับ => สมัครสมาชิก กรณีลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่นี่ครับ => Reset รหัสผ่านImage
      2. Login เข้าระบบโดยคลิก Login ตรงมุมขวาบนของหน้านี้ Image กรณีมีปัญหาในการเข้าใช้งาน คลิก Link นี้เพื่อแจ้งผู้ดูแลระบบครับ => ติดต่อผู้ดูแลระบบ
    3. เมื่อ Login แล้วสามารถกำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษได้ที่ Link นี้ครับ => ตั้งค่าส่วนตัว Image
    4. วิธีการตั้งและตอบกระทู้ดูได้ที่ Link นี้ครับ => วิธีการตั้งและตอบกระทู้ Image
    5. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ Link นี้ครับ => จัดรูปแบบตัวอักษร และสามารถกำหนดขนาดตัวอักษรใน Browser ได้ที่นี่ครับ ==> กำหนดขนาดตัวอักษรใน Browser Image

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

ฟอรั่มถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถาม-ตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบ ต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. อธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. ควรแนบตัวอย่างไฟล์มาที่ฟอรั่มนี้เพื่อเพิ่มความสะดวกในการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่น นอกจากนี้ไม่ควรแนบไฟลที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. สำหรับคำถามเกี่ยวกับ VBA ให้ลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน ควรโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. แจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#1

Postby nisit2559 » Fri Oct 06, 2017 8:19 am

คือผมต้องการดึงข้อมูลที่เป็นไฟล์ .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: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#2

Postby snasui » Fri Oct 06, 2017 8:07 pm

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

วิธีที่น่าจะทำได้คือเลือกเปิด Excel มาสองโปรแกรม คือเข้าเมนู Start ของ Windows แล้วเปิดโปรแกรม Excel ขึ้นมาสองรอบ ในรอบแรกเปิดไฟล์โปรแกรมที่ต้องการจับเวลา ส่วนโปรแกรม Excel ที่เปิดรอบหลังใช้สำหรับการทำงานตามปกติเช่นนี้เป็นต้นครับ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#3

Postby nisit2559 » Mon Oct 09, 2017 7:38 am

แล้วจะต้องเปิด Excel 2 โปรแกรมนีคือต้องเปิดที่เขียน vba เดียวกันใช่ไหมครับ

User avatar
snasui
Site Admin
Site Admin
Posts: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#4

Postby snasui » Wed Oct 11, 2017 8:59 am

: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

Postby nisit2559 » Wed Oct 11, 2017 9:07 am

ขอบคุณครับ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#6

Postby nisit2559 » Wed Oct 11, 2017 9:28 am

ผมลองทำตามแล้วครับแยกเปิด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: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#7

Postby snasui » Wed Oct 11, 2017 9:38 am

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

ผมทดสอบกับไฟล์จับเวลาโดยเปิดโปรแกรมมาสองโปรแกรม โปรแกรมแรกเปิดไฟล์จับเวลา โปรแกรมที่สองเปิดไฟล์ทำงานตามปกติ พบว่าสามารถทำงานได้ ในขณะทำงานไฟล์จับเวลายังเดินต่อเนื่อง ซึ่งโดยปกติทั่วไปหากเปิดด้วยโปรแกรมเดียวกัน เมื่อ Edit Cell ใด ๆ เซลล์ที่แสดงเวลาจะหยุดนิ่งจนกว่าแก้ไขเสร็จแล้ว Enter เวลาจึงจะเดินต่อ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#8

Postby nisit2559 » Wed Oct 11, 2017 11:03 am

รูปใหม่ครับ แล้วถ้าจะรันเป็น 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: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#9

Postby snasui » Wed Oct 11, 2017 11:25 am

: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

Postby nisit2559 » Wed Oct 11, 2017 11:29 am

ขอบคุณครับงั้นเดียวผมไปศึกษามาแล้วถ้าติดจะมาถามครับ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#11

Postby nisit2559 » Thu Oct 12, 2017 9:19 am

ผมทำได้แล้วครับแต่จะให้มันเปิดไฟล์ใหม่ได้อย่างไรครับหรือต้องไปสั่งให้มันเปิดทุกวันครับ

User avatar
snasui
Site Admin
Site Admin
Posts: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#12

Postby snasui » Thu Oct 12, 2017 7:34 pm

:D การตั้ง Job สามารถตั้งให้ทำงานเป็นรายระยะเวลาได้ตามต้องการ ไม่ว่าจะราย วัน รายชม. ฯลฯ แต่การที่มันจะทำงานได้ เครื่องที่ตั้ง Job ไว้จะต้องเปิดอยู่เสมอ่ครับ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#13

Postby nisit2559 » Mon Oct 16, 2017 9:18 am

คือว่าผมต้องการดึงข้อมูลใหม่ตลอด ผมอยากจะทราบว่าเมื่อเปิดไฟล์มาแล้วต้องเขียน VBA อย่างไรให้มันดึงข้อมูลที่เปิดครับโดยชื่อไฟล์จะไม่ซ้ำกันครับ

logic
Silver
Silver
Posts: 545
Joined: Thu Mar 18, 2010 1:57 pm

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

#14

Postby logic » Mon Oct 16, 2017 11:15 am

การใช้ VBA คุณ nisit2559 กรุณาช่วยเขียนมาก่อน เพื่อสมาชิกจึงพอจะช่วยเหลือได้ เป็นกฎของบอร์ดที่ต้องเขียนกันมาเองเสียก่อนครับ :)

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#15

Postby nisit2559 » Mon Oct 16, 2017 4:17 pm

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

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: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#16

Postby snasui » Mon Oct 16, 2017 6:37 pm

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

ช่วยลำดับปัญหาที่เป็นมาอีกรอบว่าเป็นปัญหาตรงไหน อย่างไร จะได้เข้าใจตรงกันครับ

nisit2559
Member
Member
Posts: 42
Joined: Mon Sep 04, 2017 1:45 pm

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

#17

Postby nisit2559 » Tue Oct 17, 2017 8:04 am

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

User avatar
snasui
Site Admin
Site Admin
Posts: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#18

Postby snasui » Tue Oct 17, 2017 8:25 pm

: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

Postby nisit2559 » Thu Oct 19, 2017 11:38 am

ขอสอบถามเพิ่มนะครับจากโค้ดผมพอมันเปิดโปรแกรมมารอบสองมันก็ยังไปดึงไฟล์ข้อมูลเก่าครับ ควรจะแก้โค้ดอย่างไรให้ไม่สามรถดึงข้อมูลเก่าได้ครับ

User avatar
snasui
Site Admin
Site Admin
Posts: 22238
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Contact:

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

#20

Postby snasui » Thu Oct 19, 2017 5:43 pm

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


Return to “Excel”

Who is online

Users browsing this forum: No registered users and 31 guests