: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ขออนุญาตสอบถามไม่สามารถนำเข้าไฟล์ dbf ได้ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

ขออนุญาตสอบถามไม่สามารถนำเข้าไฟล์ dbf ได้ครับ

#1

Post by 9KiTTi »

ผมพยายามแก้ปัญหาเรื่องการนำเข้าไฟล์ dbf เข้า worksheet ตามชื่อไฟล์ แต่ไม่สามารถนำเข้าได้ครับ หลังจากกดเลือกไฟล์นำเข้า ปรากฎว่าเป็นการสร้าง worksheet ใหม่ขึ้นมาแทน และไม่สามารถนำเข้าข้อมูลจากไฟล์ dbf ได้เช่นกัน รบกวนแนะนำวิธีแก้ไขปัญหาด้วยครับ

ขอบพระคุณครับ

Code: Select all

Sub ImportdbfFiles()
    Dim fso As Object
    Dim xlsheet As Worksheet
    Dim qt As QueryTable
    Dim dbffilesToOpen As Variant, dbffile As Variant
    Dim x As Long
    On Error Resume Next

    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")

    txtfilesToOpen = Application.GetOpenFilename _
                 (FileFilter:="Dbf Files (*.dbf), *.dbf", _
                  MultiSelect:=True, Title:="àÅ×Í¡ä¿Åì·Õèµéͧ¡ÒùÓà¢éÒ by...")
    If VarType(dbffilesToOpen) = vbBoolean Then
        MsgBox "¡ÃسÒàÅ×Í¡ä¿Åì·Õè¨Ð¹Óà¢éÒ", , "by..."
        Exit Sub
    End If

    For Each dbffile In dbffilesToOpen

        For Each xlsheet In ThisWorkbook.Worksheets
        
            If LCase(xlsheet.Name) = LCase(fso.GetBaseName(dbffile)) Then

                xlsheet.Activate
                GoTo ImportData
            End If
        Next xlsheet


        Set xlsheet = ThisWorkbook.Worksheets.Add( _
                             After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        xlsheet.Name = Replace(fso.GetFileName(dbffile), ".dbf", "")
        xlsheet.Activate
        GoTo ImportData

ImportData:

        ActiveSheet.Range("A:Z").EntireColumn.Delete xlShiftToLeft


        With ActiveSheet.QueryTables.Add(Connection:="DBF;" & dbffile, _
          Destination:=ActiveSheet.Cells(3, 1))
          
        .Name = "DataSheet"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .AdjustColumnWidth = True
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = "|"
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
        .Refresh BackgroundQuery:=False
        End With
        
        'For x = 1 To 100
        'UpdateProgressBar x, 100
    'Next x

    ActiveSheet.Range("A3").AutoFilter Field:=1, Visibledropdown:=True
    ActiveSheet.Range("A3").AutoFilter Field:=2, Visibledropdown:=True
    Application.ErrorCheckingOptions.NumberAsText = False

       Cells.Select
        Selection.NumberFormat = "0"
    
        For Each qt In ActiveSheet.QueryTables
            qt.Delete
        Next qt
    Next dbffile

    Application.ScreenUpdating = True
    MsgBox "¹Óà¢éÒ¢éÍÁÙÅÊÓàÃç¨áÅéÇ", vbInformation, "ÊÓàÃç¨áÅéÇ"
    
    Sheets(1).Activate

    Set fso = Nothing
    
     On Error Resume Next
    For Each sht In ThisWorkbook.Worksheets
      xlsheet.Cells.SpecialCells(xlCellTypeVisible).EntireColumn.AutoFit
      
    'Application.ScreenUpdating = False
        'With ActiveWindow
        '.DisplayGridlines = True
        '.DisplayHeadings = True
    'End With
    'Application.ScreenUpdating = True
      
    Next sht
  On Error GoTo 0
    

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขออนุญาตสอบถามไม่สามารถนำเข้าไฟล์ dbf ได้ครับ

#2

Post by snasui »

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

Code: Select all

Sub ImportdbfFiles()
    Dim fso As Object
    Dim xlsheet As Worksheet
    Dim qt As QueryTable
    Dim dbffilesToOpen As Variant, dbffile As Variant
    Dim x As Long, wb As Workbook
'    On Error Resume Next

    
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")

    txtfilesToOpen = Application.GetOpenFilename _
                 (FileFilter:="Dbf Files (*.dbf), *.dbf", _
                  MultiSelect:=True, Title:="àÅ×Í¡ä¿Åì·Õèµéͧ¡ÒùÓà¢éÒ by...")
    If VarType(dbffilesToOpen) = vbBoolean Then
        MsgBox "¡ÃسÒàÅ×Í¡ä¿Åì·Õè¨Ð¹Óà¢éÒ", , "by..."
        Exit Sub
    End If

'    For Each dbffile In dbffilesToOpen
    For i = LBound(txtfilesToOpen) To UBound(txtfilesToOpen)
        For Each xlsheet In ThisWorkbook.Worksheets
        
'            If LCase(xlsheet.Name) = LCase(fso.GetBaseName(dbffile)) Then
            If LCase(xlsheet.Name) = LCase(fso.GetBaseName(txtfilesToOpen(i))) Then
                xlsheet.Activate
                GoTo ImportData
            End If
        Next xlsheet

        ' ÊÃéÒ§ sheet ãËÁè ¶éÒäÁ辺 sheet ·Õèµéͧ¡ÒÃ
        Set xlsheet = ThisWorkbook.Worksheets.Add( _
                             After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        xlsheet.Name = Replace(fso.GetFileName(dbffile), ".dbf", "")
        xlsheet.Activate
        GoTo ImportData

ImportData:
        ActiveSheet.Range("A:Z").EntireColumn.Delete xlShiftToLeft
        Set wb = Workbooks.Open(txtfilesToOpen(i))
        wb.Worksheets(1).UsedRange.Copy ThisWorkbook.ActiveSheet.Cells(3, 1)
'        With ActiveSheet.QueryTables.Add(Connection:=txtfilesToOpen(i), _
'          Destination:=ActiveSheet.Cells(3, 1))
'
'        .Name = "DataSheet"
'        .FieldNames = True
'        .RowNumbers = False
'        .FillAdjacentFormulas = False
'        .PreserveFormatting = True
'        .RefreshOnFileOpen = False
'        .AdjustColumnWidth = True
'        .TextFilePromptOnRefresh = False
'        .TextFilePlatform = 65001
'        .TextFileStartRow = 1
'        .TextFileParseType = xlDelimited
'        .TextFileTextQualifier = xlTextQualifierDoubleQuote
'        .TextFileConsecutiveDelimiter = False
'        .TextFileTabDelimiter = True
'        .TextFileSemicolonDelimiter = False
'        .TextFileCommaDelimiter = False
'        .TextFileSpaceDelimiter = False
'        .TextFileOtherDelimiter = "|"
'        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
'        .Refresh BackgroundQuery:=False
'        End With
        
        'For x = 1 To 100
        'UpdateProgressBar x, 100
    'Next x
    ThisWorkbook.Activate
    ActiveSheet.Range("A3").AutoFilter Field:=1, Visibledropdown:=True
    ActiveSheet.Range("A3").AutoFilter Field:=2, Visibledropdown:=True
    Application.ErrorCheckingOptions.NumberAsText = False

       Cells.Select
        Selection.NumberFormat = "0"
    
'        For Each qt In ActiveSheet.QueryTables
'            qt.Delete
'        Next qt
'    Next dbffile
    wb.Close False
    Next i
    Application.ScreenUpdating = True
    MsgBox "¹Óà¢éÒ¢éÍÁÙÅÊÓàÃç¨áÅéÇ", vbInformation, "ÊÓàÃç¨áÅéÇ"
    
    Sheets(1).Activate

    Set fso = Nothing
    
     On Error Resume Next
    For Each sht In ThisWorkbook.Worksheets
      xlsheet.Cells.SpecialCells(xlCellTypeVisible).EntireColumn.AutoFit
      
    'Application.ScreenUpdating = False
        'With ActiveWindow
        '.DisplayGridlines = True
        '.DisplayHeadings = True
    'End With
    'Application.ScreenUpdating = True
      
    Next sht
  On Error GoTo 0
    

End Sub
Excel สามารถเปิดไฟล์ DBF ได้โดยตรง ไม่จำเป็นต้องเปิดผ่าน Query Table ที่จะต้องสร้างไปลบทิ้งไป สำหรับการสร้างชีต สร้างไฟล์ หรืออื่นใด เกิดจากการเขียนคำสั่งเอาไว้ให้โปรแกรมทำงานเอาไว้อย่างนั้น

ในการ Debug โปรแกรมควร Break on error resume next ทิ้งไปก่อนแล้วสังเกตว่าโปรแกรมฟ้องที่บรรทัดไหน อย่างไร การใช้ VBA จำเป็นต้องฝึก Debug ให้คล่องครับ
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถามไม่สามารถนำเข้าไฟล์ dbf ได้ครับ

#3

Post by 9KiTTi »

แก้ไขได้แล้วครับอาจารย์ ขอบพระคุณครับ ต่อไปผมจะฝึกตามที่อาจารย์แนะนำมาครับ
Post Reply