: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

การระบุชื่อชีท กรณี Loop เพื่อนำเข้าข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

การระบุชื่อชีท กรณี Loop เพื่อนำเข้าข้อมูล

#1

Post by Bafnet »

สวัสดีครับอาจารย์
วันนี้มีเรื่องรบกวนขอคำแนะนำการแก้ไข พยายามแล้วครับ
1.ต้องการนำเข้าข้อมูลจากไฟล์เอ็กเซลอืนที่มีหลายชีท
โดยทำการ Loop ชีท เพื่อนำเข้าข้อมูลให้ครบทุกชีท
2.เมื่อเปิดไฟล์ ให้เช็คก่อนว่าไฟล์ที่เลือกมีกี่ชีทนำค่าไปเก็บไว้
3.Loop คำสั่ง ให้ r = ชีท 1 , 2 .... จนเท่ากับจำนวนชีทที่เก็บค่าไว้ จึงหยุดทำ
4.เกิดปัญหาที่ การกำหนดค่า r ซึ่งได้ลองทั้ง r AS long และ r As sting แต่เกิด Debug
ค่า r ยังไม่ถูกต้อง
มีคำสั่งที่ผมพยายามดังนี้

Code: Select all

Private Sub CommandButton2_Click()
Dim fileToOpen
Dim rs As Range
Dim ri As Range
Dim ro As Range
Dim rx As Range
Dim r As Long
Dim Mydata As Range
Dim MyFile As String
Dim sFile As String
Dim xFile As String
Dim FileSaveName As String
'On Error Resume Next
Application.ScreenUpdating = False

With Workbooks("FBI.xlsm").Worksheets("Rest")
Set rs = Workbooks("FBI.xlsm").Worksheets("Rest").Range("A1")
End With

With Workbooks("FBI.xlsm").Worksheets("FBI")
Set ri = Workbooks("FBI.xlsm").Worksheets("FBI").Range("A1")
End With
fileToOpen = Application.GetOpenFilename '( _
      FileFilter:="WorkbookMacro (*.xls),*.xls")
      MyFile = fileToOpen

 If fileToOpen = False Then
  MsgBox "โปรดเลือกไฟล์ครับ"CIM 360"
 Exit Sub
 End If
 
 
  If fileToOpen <> False Then
Workbooks.OpenText Filename:=MyFile
  Application.DisplayAlerts = False
   rs.Value = ActiveWorkbook.Worksheets.Count 'ส่งจำนวนชีทไฟล์ที่เลือกไปเก็บไว้
   
   r = 1
   Do Until r = rs.Value
   If r = 1 Then
   ActiveWorkbook.Worksheets(r).Columns("A11:S30").Select ' ตำแหน่งที่เกิดปัญหา
 Selection.Copy: ri.PasteSpecial xlPasteValues
   Application.CutCopyMode = False
    Else
  ActiveWorkbook.Worksheets(r).Columns("A3:Q23").Select
 Selection.Copy: ri.PasteSpecial xlPasteValues
   Application.CutCopyMode = False
   End If
   With Workbooks("FBI.xlsm").Worksheets("FBI")
Set ro = .Range(.Range("A1"), .Range("S40") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
  End With
  With Workbooks("FBI.xlsm").Worksheets("FBIX")
Set rx = Workbooks("FBI.xlsm").Worksheets("FBIX").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End With
 ro.Select
 ro.Copy: rx.PasteSpecial xlPasteValues
  Application.CutCopyMode = False
  
   r = r + 1
     DoEvents
Loop
   
 ActiveWorkbook.Close True

 End If
 
End Sub
ไฟล์งาน= FBI
ไฟล์ข้อมูลที่ต้องการนำเข้า= ปาลัส
รบกวนขอคำแนะนำด้วยครับด้วยครับ :roll:
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การระบุชื่อชีท กรณี Loop เพื่อนำเข้าข้อมูล

#2

Post by snasui »

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

Code: Select all

'Other code
If r = 1 Then
    ActiveWorkbook.Worksheets(r).Select
    Range("A11:S30").Copy
    ri.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
Else
    ActiveWorkbook.Worksheets(r).Select
    Range("A3:Q23").Copy
    ri.PasteSpecial xlPasteValues
   Application.CutCopyMode = False
End If
'Other code
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การระบุชื่อชีท กรณี Loop เพื่อนำเข้าข้อมูล

#3

Post by Bafnet »

อาจารย์ครับได้ปรับเปลี่ยนตามคำแนะนำ
อาการ Debug ไม่ปรากฏว่า ไม่มีข้อมูลใดๆมาทั้งสิ้น
ได้ทดสอบไล่คำสั่งดูพบว่ามันดันไป Copy ที่ชีท 1 ของไฟล์ FBI ที่ชื่อ Rest
และ Copy เฉพาะ A3:Q23
ช่วยด้วยครับ ไม่ว่าจะลองปรับเปลี่ยนโดนระบุเป็นชื่อเวิร์คบุ๊คโดยตรง ก็ยังทำไม่สำเร็จ
กลายเป็นตัวมัน Copy ชีท1 ตัวมันเอง ไม่ยอม copy ไฟล์ปาลัส

Code: Select all

Private Sub CommandButton2_Click()
Dim fileToOpen
Dim rs As Range
Dim ri As Range
Dim ro As Range
Dim rx As Range
Dim r As Long
Dim x As String
Dim Mydata As Range
Dim MyFile As String
Dim sFile As String
Dim xFile As String
Dim FileSaveName As String
'On Error Resume Next
Application.ScreenUpdating = False
With Workbooks("FBI.xlsm").Worksheets("Rest")
Set rs = Workbooks("FBI.xlsm").Worksheets("Rest").Range("A1")
End With
With Workbooks("FBI.xlsm").Worksheets("FBI")
Set ri = Workbooks("FBI.xlsm").Worksheets("FBI").Range("A1")
End With

fileToOpen = Application.GetOpenFilename '( _
      FileFilter:="WorkbookMacro (*.xls),*.xls")
      MyFile = fileToOpen
 If fileToOpen = False Then
  MsgBox "โปรดเลือกไฟล์", vbOKOnly, "CIM 360"
 Exit Sub
 End If
 
 
  If fileToOpen <> False Then
Workbooks.OpenText Filename:=MyFile
  Application.DisplayAlerts = False
   rs.Value = ActiveWorkbook.Worksheets.Count
      r = 1
      Do Until r = rs.Value
 If r = 1 Then
    ActiveWorkbook.Worksheets(r).Select
    Range("E11:S30").Copy
    ri.PasteSpecial xlPasteValues
    'Application.CutCopyMode = False
Else
    ActiveWorkbook.Worksheets(r).Select
    Range("A3:Q23").Copy
    ri.PasteSpecial xlPasteValues
   'Application.CutCopyMode = False
End If
   With Workbooks("FBI.xlsm").Worksheets("FBI")
Set ro = .Range(.Range("A1"), .Range("S20") _
    .End(xlUp)).SpecialCells(xlCellTypeVisible)
  End With
  With Workbooks("FBI.xlsm").Worksheets("FBIX")
Set rx = Workbooks("FBI.xlsm").Worksheets("FBIX").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End With
' ro.Select
 'ro.Copy: rx.PasteSpecial xlPasteValues
  'Application.CutCopyMode = False
    r = r + 1
    DoEvents
Loop
   
 ActiveWorkbook.Close True
 
 End If
 
End Sub
อาจารย์ช่วยด้วยครับ :roll:
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การระบุชื่อชีท กรณี Loop เพื่อนำเข้าข้อมูล

#4

Post by snasui »

:D กรณีมีการ Copy ข้าม Workbook ควรระบุให้ชัดว่าต้องการ Copy จาก Workbook ใด ไป Workbook ใด

Code ที่ผมปรับไปให้เพราะใช้คำว่า ActiveWorkbook ซึ่งคำว่า ActiveWorkbook คือไฟล์ปัจจุบันที่กำลังทำงาน หากระบุได้ว่าเป็นไฟล์ใดหรือเป็นไฟล์จากตัวแปรใดก็ให้ใช้ตามนั้น จะได้ไม่สับสน

จากด้านบน คำว่า ActiveWorkbook ที่เขียนใน Code ต้องการให้เป็นไฟล์ใด นอกจากนี้ควรลำดับสิ่งที่ต้องการจะทำและยกตัวอย่างผลลัพธ์ที่ต้องการมาด้วยจะได้เข้าใจตรงกันครับ
Post Reply