: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 ให้หน่อยครับถ้าต้องการเขียนให้สั้นกว่านี้

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 ให้หน่อยครับถ้าต้องการเขียนให้สั้นกว่านี้

Re: รบกวนดู Code ให้หน่อยครับถ้าต้องการเขียนให้สั้นกว่านี้

#3

by moosuper013 » Wed Aug 24, 2016 9:31 am

ขอบคุณครับอาจารย์ ทางผมได้นำไปปรับใช้ แล้วสามารถช่วยให้ Excel เร็วขึ้นพอสมควร ดีกว่าการ Copy มากๆครับ :thup: :cp:

Re: รบกวนดู Code ให้หน่อยครับถ้าต้องการเขียนให้สั้นกว่านี้

#2

by snasui » Tue Aug 23, 2016 8:58 pm

:D ลองปรับ Code เป็นด้านล่างแทนการ Copy ครับ

Code: Select all

Sub Imds()
    Dim PathFolder As String
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Select a Folder"
        .Filters.Clear
        .AllowMultiSelect = False
        .InitialFileName = ""
    
       If .Show = -1 Then
           If Right(.SelectedItems(1), 1) = "\" Then
                PathFolder = .SelectedItems(1)
            Else
                PathFolder = .SelectedItems(1)
           End If
            wsI = PathFolder
        End If
        Range("C4").Select
        ActiveCell.FormulaR1C1 = PathFolder
    End With
    Call Dataimport
End Sub

Function Dataimport()
    Dim wbO As Workbook
    Dim wbI1 As Workbook
    Dim wsI1 As Worksheet
    Dim wsI2 As Worksheet
    Dim wsI3 As Worksheet
    Dim im As String
    Set wbI1 = ThisWorkbook
    Set wsI1 = wbI1.Sheets("Dataimport1")
    Set wsI2 = wbI1.Sheets("Dataimport2")
    Set wsI3 = wbI1.Sheets("Dataimport3")
    im = Sheets("Home").Range("C4")
    If im = "" Then
        MsgBox "Cancel Import Data"
        GoTo X
    End If
    Set wbO = Workbooks.Open(im)
    wsI1.Range("A:A").Value = wbO.Sheets(1).Range("F:F").Value
    wsI1.Range("B:B").Value = wbO.Sheets(1).Range("B:B").Value
    wsI1.Range("C:C").Value = wbO.Sheets(1).Range("G:G").Value
    wsI1.Range("D:D").Value = wbO.Sheets(1).Range("K:K").Value
    wsI2.Range("A:A").Value = wbO.Sheets(2).Range("F:F").Value
    wsI2.Range("B:B").Value = wbO.Sheets(2).Range("B:B").Value
    wsI2.Range("C:C").Value = wbO.Sheets(2).Range("G:G").Value
    wsI2.Range("D:D").Value = wbO.Sheets(2).Range("K:K").Value
    wsI3.Range("A:A").Value = wbO.Sheets(3).Range("F:F").Value
    wsI3.Range("B:B").Value = wbO.Sheets(3).Range("B:B").Value
    wsI3.Range("C:C").Value = wbO.Sheets(3).Range("G:G").Value
    wsI3.Range("D:D").Value = wbO.Sheets(3).Range("K:K").Value
    wbO.Close SaveChanges:=False
X:
End Function

รบกวนดู Code ให้หน่อยครับถ้าต้องการเขียนให้สั้นกว่านี้

#1

by moosuper013 » Tue Aug 23, 2016 12:29 pm

รบกวนทาง อาจารย์และผู้รู้ทั้งหมดครับ รบกวนช่วยดู Code ให้หน่อยครับว่าพอจะสามารถเขียนให้สั้นลงมากกว่านี้อีกไหมครับพอดีว่า พอนำไปใช้งานแล้ว Excel ค่อนข้างใช้เวลานานพอสมควร

พอดีทางผมต้องการให้ VBA ทำงานโดยการเปิดไฟล์ตามตำแหน่งที่อยู่ใน คอลัมน์ C4 และ Copyข้อมูลเฉพาะ บางคอลัมน์และมีทั้งหมด3 Sheet และนำข้อมูลที่ Copy มาวางในWorkbook ที่กำหนด

Code: Select all

Sub Imds()
Dim PathFolder As String
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Select a Folder"
    .Filters.Clear
    .AllowMultiSelect = False
    .InitialFileName = ""

   If .Show = -1 Then
       If Right(.SelectedItems(1), 1) = "\" Then
            PathFolder = .SelectedItems(1)
        Else
            PathFolder = .SelectedItems(1)
       End If
        wsI = PathFolder
    End If
    Range("C4").Select
    ActiveCell.FormulaR1C1 = PathFolder
End With
Call Dataimport
End Sub
Function Dataimport()
    Dim wbO As Workbook
    Dim wbI1 As Workbook
    Dim wbI2 As Workbook
    Dim wbI3 As Workbook
    Dim wsI1 As Worksheet
    Dim wsI2 As Worksheet
    Dim wsI3 As Worksheet
    Dim im As String
    Set wbI1 = ThisWorkbook
    Set wsI1 = wbI1.Sheets("Dataimport1")
    Set wbI2 = ThisWorkbook
    Set wsI2 = wbI2.Sheets("Dataimport2")
    Set wbI3 = ThisWorkbook
    Set wsI3 = wbI3.Sheets("Dataimport3")
    im = Sheets("Home").Range("C4")
    If im = "" Then
        MsgBox "Cancel Import Data"
        GoTo X
        End If
    Set wbO = Workbooks.Open(im)
    wbO.Sheets(1).Range("F:F").Cells.Copy wsI1.Cells.Range("A:A")
    wbO.Sheets(1).Range("B:B").Cells.Copy wsI1.Cells.Range("B:B")
    wbO.Sheets(1).Range("G:G").Cells.Copy wsI1.Cells.Range("C:C")
    wbO.Sheets(1).Range("K:K").Cells.Copy wsI1.Cells.Range("D:D")
    wbO.Sheets(2).Range("F:F").Cells.Copy wsI2.Cells.Range("A:A")
    wbO.Sheets(2).Range("B:B").Cells.Copy wsI2.Cells.Range("B:B")
    wbO.Sheets(2).Range("G:G").Cells.Copy wsI2.Cells.Range("C:C")
    wbO.Sheets(2).Range("K:K").Cells.Copy wsI2.Cells.Range("D:D")
    wbO.Sheets(3).Range("F:F").Cells.Copy wsI3.Cells.Range("A:A")
    wbO.Sheets(3).Range("B:B").Cells.Copy wsI3.Cells.Range("B:B")
    wbO.Sheets(3).Range("G:G").Cells.Copy wsI3.Cells.Range("C:C")
    wbO.Sheets(3).Range("K:K").Cells.Copy wsI3.Cells.Range("D:D")
    wbO.Close SaveChanges:=False
X:
End Function

Top