สมัครสมาชิก
 

หากไฟล์เปิดอยู่ให้ปิดก่อน



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

31 พ.ค. 62 , 11:47:20
อ่าน 237 ครั้ง

kitisak

หากไฟล์เปิดอยู่ให้ปิดก่อน
« เมื่อ: 31 พ.ค. 62 , 11:47:20 »
ผมทำการ copy ไฟล์ และลบไฟล์เดิมทิ้ง
ปัญหามีว่า ไฟล์เดิม มันเปิดอยู่ คำสั่งไม่ทำงาน เราจะคำสั่งยังไง หากไฟล์เปิดอยู่ให้ปิดก่อนแล้วลบทิ้ง
***
Dim sPath, sfilename, sLink, sCopyInto, myOutput As String
Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfilename = GetFileName
    myOutput = Right(sfilename, Len(sfilename) - InStrRev(sfilename, "."))
    sPath = GetFilePath
    sLink = sPath & sfilename
   
   'If Dir("CurrentProject.path & '\map\' & Me.NewName & '.' & myOutput", vbNormal) = "" Then
   
   
    sCopyInto = [Forms]![manHisInsu]![folderInsu] & "\" & [Forms]![manHisInsu]![Even2] & "." & myOutput
    fso.CopyFile sLink, sCopyInto
    Set fso = Nothing
   
    If sPath = [Forms]![manHisInsu]![folderInsu] & "\" Then
        Else
        Kill sLink
    End If
   
   
    MsgBox ("บันทึกเรียบร้อยแล้ว"), vbInformation, "ผลการทำงาน"

Exit_Command33_Click:
    Exit Sub

Err_Command33_Click:
    MsgBox " ไฟลนี้อาจเปิดอยู่ ให้ปิดไฟล์นี้เสียก่อน"
    Resume Exit_Command33_Click

 

31 พ.ค. 62 , 14:53:50
ตอบกลับ #1

ปิ่นณรงค์

: หากไฟล์เปิดอยู่ให้ปิดก่อน
« ตอบกลับ #1 เมื่อ: 31 พ.ค. 62 , 14:53:50 »
เช็ค path จากตัวแปร   sLink  เลยก็ได้คับถ้าเปิดอยู่ก็สั่งปิดแล้ว Copy พอ Copy เสร็จสั่งลบไฟล์เก่าเลย
ตรง Reference เพิ่ม microsoft scripting runtime ด้วยนะครับ

โค๊ด: [Select]
Dim sPath, sfilename, sLink, sCopyInto, myOutput As String
Dim fso As Object
Dim OpenDB As Object
Dim myFileOld As FileSystemObject

    Set fso = CreateObject("Scripting.FileSystemObject")
    sfilename = GetFileName
    myOutput = Right(sfilename, Len(sfilename) - InStrRev(sfilename, "."))
    sPath = GetFilePath
    sLink = sPath & sfilename
   
    sCopyInto = [Forms]![manHisInsu]![folderInsu] & "\" & [Forms]![manHisInsu]![Even2] & "." & myOutput  'แล้ว Copy File
    fso.CopyFile sLink, sCopyInto
    Set fso = Nothing
   
    Set OpenDB = GetObject(sLink) 'สั่งปิดไฟล์ก่อน
    OpenDB.Application.Quit
    Set OpenDB = Nothing

    Set myFileOld = New FileSystemObject 'สั่งลบไฟล์เดิม
    myFileOld.DeleteFile sLink
    Set myFileOld = Nothing
   
    MsgBox ("บันทึกเรียบร้อยแล้ว"), vbInformation, "ผลการทำงาน"

   
Exit_Command33_Click:
    Exit Sub

Err_Command33_Click:
    MsgBox " ไฟลนี้อาจเปิดอยู่ ให้ปิดไฟล์นี้เสียก่อน"
    Resume Exit_Command33_Click
« แก้ไขครั้งสุดท้าย: 31 พ.ค. 62 , 15:48:59 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

31 พ.ค. 62 , 16:07:42
ตอบกลับ #2

kitisak

: หากไฟล์เปิดอยู่ให้ปิดก่อน
« ตอบกลับ #2 เมื่อ: 31 พ.ค. 62 , 16:07:42 »
ไฟล์ที่จะปิด คัดลอก และ ลบ ไม่ใช้ไฟล์ access แต่เป็นไฟล์ pdf หรืออื่น ๆ ได้ไหมครับ

 

04 มิ.ย. 62 , 12:19:02
ตอบกลับ #3

ปิ่นณรงค์

: หากไฟล์เปิดอยู่ให้ปิดก่อน
« ตอบกลับ #3 เมื่อ: 04 มิ.ย. 62 , 12:19:02 »
ไฟล์ที่จะปิด คัดลอก และ ลบ ไม่ใช้ไฟล์ access แต่เป็นไฟล์ pdf หรืออื่น ๆ ได้ไหมครับ

สรุปมาให้ผมหน่อยครับ เป็นไฟล์ประเภทอะไรบ้าง
คงต้องทำเป็น Select Case ตามประเภทไฟล์ครับ
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

04 มิ.ย. 62 , 22:28:01
ตอบกลับ #4

kitisak

: หากไฟล์เปิดอยู่ให้ปิดก่อน
« ตอบกลับ #4 เมื่อ: 04 มิ.ย. 62 , 22:28:01 »
ไฟล์ pdf , docx และ jpg
ขอบพระคุณอย่างสูงครับ

 

07 มิ.ย. 62 , 08:53:16
ตอบกลับ #5

ปิ่นณรงค์

: หากไฟล์เปิดอยู่ให้ปิดก่อน
« ตอบกลับ #5 เมื่อ: 07 มิ.ย. 62 , 08:53:16 »
ถ้าเป็นไฟล์พวก excel word access มันทำง่ายคับ ในการสั่งปิด แต่พอเป็นพวกไฟล์ PDF หรือ ไฟล์รูปภาพ คงยังหาวิธีไม่เจอเลยคับ
คือถ้าอยากจะปิดไฟล์พวกนี้จริงๆ คงต้องสั่งปิด Process ที่ทำงานอยู่กับโปรแกรมที่ใช้เปิดไฟล์รูปภาพ และโปรแกรม adobe reader ครับ

ส่วนปิดไฟล์ Word ก็ประมาณนี้ครับ

Dim sPath, sfilename, sLink, sCopyInto, myOutput As String
Dim fso As Object
Dim OpenDB As Object
Dim myFileOld As FileSystemObject
Dim appExtension As String
Dim ObjName As String

    Set fso = CreateObject("Scripting.FileSystemObject")
    sfilename = GetFileName
    myOutput = Right(sfilename, Len(sfilename) - InStrRev(sfilename, "."))
    sPath = GetFilePath
    sLink = sPath & sfilename
   
    sCopyInto = [Forms]![manHisInsu]![folderInsu] & "\" & [Forms]![manHisInsu]![Even2] & "." & myOutput  'แล้ว Copy File
    fso.CopyFile sLink, sCopyInto
    Set fso = Nothing
   
   appExtension = Right$(slink, Len(slink) - InStrRev(slink, ".") + 1) 'ดึงนามสกุลมา
   ObjName = Right(slink, Len(slink) - InStrRev(slink, "\")) 'ดึงชื่อไฟล์และนามสกุลมา

   If appExtension = ".doc" Or appExtension = ".docx" Then

   Set objWord = GetObject(, "word.application")
   Set objDocs = objWord.Documents

   For Each doc In objDocs
       If StrComp(doc.Name, ObjName, 1) = 0 Then
           doc.Close
           objWord.Application.Quit
           Exit For
       End If
   Next
   Set objDocs = Nothing
   Set objWord = Nothing
   End If


    Set myFileOld = New FileSystemObject 'สั่งลบไฟล์เดิม
    myFileOld.DeleteFile sLink
    Set myFileOld = Nothing
   
    MsgBox ("บันทึกเรียบร้อยแล้ว"), vbInformation, "ผลการทำงาน"

   
Exit_Command33_Click:
    Exit Sub

Err_Command33_Click:
    MsgBox " ไฟลนี้อาจเปิดอยู่ ให้ปิดไฟล์นี้เสียก่อน"
    Resume Exit_Command33_Click
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak


บอร์ดเรียนรู้ Access สำหรับคนไทย