Page 1 of 1

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

Posted: Wed Feb 25, 2026 1:40 pm
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

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

Posted: Wed Feb 25, 2026 3:23 pm
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"
 
  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

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

Posted: Fri Feb 27, 2026 2:12 pm
by tigerwit
ได้แล้วครับ ขอบคุณมากครับ