: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

การใช้ VBA.InStr(fileToOpen) ตรวจสอบชื่อไฟล์ก่อนนำเข้า

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
tigerwit
Silver
Silver
Posts: 563
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

การใช้ VBA.InStr(fileToOpen) ตรวจสอบชื่อไฟล์ก่อนนำเข้า

#1

Post by tigerwit »

จากโค๊ดนี้
เป็นการตรวจสอบชื่อไฟล์ที่จะนำเข้า("รับจ่าย_25-02-69") ว่าตรงกับที่เขียนไว้ใน เซล A8 หรือไม่
ถ้าตรงก็ในนำเข้า ถ้าไม่ตรงก็ยกเลิกการนำเข้า
ต้องการให้เปลี่ยนการตรวจสอบแค่ชื่อไฟล์แค่จากข้างหน้าไป 7 ตัว ("รับจ่าย") ถ้าใช่ก็ให้นำเข้า

Code: Select all

        If VBA.InStr(fileToOpen, Range("A8").Value) = 0 Then
            MsgBox "ไฟล์ที่นำเข้าไม่ใช่ไฟล์ " & Range("A8").Value & " โปรดตรวจสอบ !!", vbOKOnly + vbInformation, "กรุณาเลือกไฟล์ให้ถูกต้อง"
        Exit Sub
        End If
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31229
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การใช้ VBA.InStr(fileToOpen) ตรวจสอบชื่อไฟล์ก่อนนำเข้า

#2

Post by snasui »

:D ตัวอย่างการปรับ Code สังเกตได้ตามหมายเลขที่ผมเพิ่มเข้าไปครับ

Code: Select all

Sub ImportAct()
  Dim fileToOpen As Variant
  Dim fileFilterPattern As String
  Dim wsMaster As Worksheet
  Dim wbTextImport As Workbook
  Dim folderPath As String
  Dim fName As String '1. Declare fName variable
  
  folderPath = "C:\TEST\CSV"
  folderPath = "C:\Users\s_nas\Downloads\"
  On Error Resume Next '
  ChDrive Left(folderPath, 1)
  ChDir folderPath
  On Error GoTo 0
  Application.ScreenUpdating = False

  If MsgBox("คุณต้องการนำเข้า " & Range("A8").Value & " ใช่หรือไม่?", 36, "ยืนยันการนำบันทึกรับจ่ายเงิน") = 6 Then
        fileToOpen = Application.GetOpenFilename(Title:="เปิดไฟล์ .csv เพื่อนำเข้าข้อมูล", FileFilter:="Text Files (*.txt; *.csv),*.txt;*.csv")
            
            '2. Assign file name to fName
            fName = VBA.Split(fileToOpen, "\")(UBound(VBA.Split(fileToOpen, "\")))
            
            If fileToOpen = False Then
                MsgBox "คุณไม่ได้เลือกไฟล์ที่จะนำเข้า", vbOKOnly + vbInformation, "ยกเลิกการนำเข้า" & Range("a16").Value
            Else
                If VBA.InStr(fileToOpen, Range("A8").Value) = 0 Then
                    MsgBox "ไฟล์ที่นำเข้าไม่ใช่ไฟล์ " & Range("A8").Value & " โปรดตรวจสอบ !!", vbOKOnly + vbInformation, "กรุณาเลือกไฟล์ให้ถูกต้อง"
                    Exit Sub
                End If
                
                '3. Check 1st 7 digit of fName
                If VBA.Left(fName, 7) <> "รับจ่าย" Then
                    MsgBox "File name is incorrect. Please try again.", vbInformation
                    Exit Sub
                End If
                
                Workbooks.Open Filename:=fileToOpen, UpdateLinks:=0, local:=True
                Set wbTextImport = ActiveWorkbook
                Set wsMaster = ThisWorkbook.ActiveSheet
                wsMaster.Range("C4:G1515,I4:I1515").ClearContents
                wbTextImport.Worksheets(1).Range("A1:E1512").Copy
                wsMaster.Range("C4").PasteSpecial xlPasteValues
                wbTextImport.Worksheets(1).Range("F1:F1515").Copy
                wsMaster.Range("H4").PasteSpecial xlPasteValues
                Application.CutCopyMode = False
                wbTextImport.Close False
                Range("C4").Select
    
                Application.ScreenUpdating = True
                MsgBox "นำเข้าบันทึกรับจ่ายเงิน เรียบร้อยแล้ว !!", vbInformation
            End If
    End If
End Sub
Post Reply