นำ Code ที่ทำการ Save มาโพสต์ แจ้งว่าอยู่ใน ไฟล์ไหน Module ไหน จะได้เข้าถึงปัญหาโดยไวครับ
การใช้งาน ใช้งานใน excel 2017 ได้ครับ
แสดง Code ที่สั่งให้ EX_book.xls ทำงาน save ครับ
Code นี้อยู่ใน ไฟล์ CreateNewProject ,Module Macro_NewProject
Code: Select all
Public Sub MacroSaveAs_Filename()
''''''''''''''''''''''''''
Dim i, jcount As Integer
i = 6
jcount = 0
Do While Sheet1.Cells(i, 1).Value <> ""
i = i + 1
jcount = jcount + 1
Loop
Sheet1.Cells(2, 4) = jcount
''''''''''''''''''''''''''''''''''''
'SAVE ชื่อ และ ตั้งชื่อ Folder ตาม Excel
Dim xlsName, folderName, path, Co_name, in_charge As String
path = Application.ActiveWorkbook.path
' xlsName = Sheets("Sheet1").Range("B6")
xlsName = Sheet1.Cells(i - 1, 2).Text
' folderName = Sheets("Sheet1").Range("B6")
folderName = Sheet1.Cells(i - 1, 2).Text
' Co_name = Sheets("Sheet1").Range("C6")
Co_name = Sheet1.Cells(i - 1, 3).Text
in_charge = Sheet1.Cells(i - 1, 4).Text
MkDir path & "\" & folderName 'สร้าง Folder ชื่อ folderName ใน path
Workbooks.Open Filename:=path & "\EX_book.xlsm"
' Application.Run "path & " \ " & folderName & " \ " & xlsName & .xlsm!Sheet1.test", pathf = path
' Application.Run "path & " \ " & folderName & " \ " & xlsName & .xlsm!Sheet1.test", folder = folderName
ActiveWorkbook.Sheets("Log").Range("A1").Value = Co_name
ActiveWorkbook.Sheets("Log").Range("N19").Value = in_charge
ActiveWorkbook.SaveAs Filename:=path & "\" & folderName & "\" & xlsName & ".xlsm", FileFormat:=52
ActiveWorkbook.Close
Call Shell("explorer.exe" & " " & path & "\" & folderName, vbNormalFocus)
Workbooks.Open Filename:=path & "\First_Form.xlsm"
ActiveWorkbook.SaveAs Filename:=path & "\" & folderName & "\" & xlsName & " First Form.xlsm", FileFormat:=52
MsgBox "Please print this form and bring it to your first time audit"
End Sub
หมายเหตุ
โดยปกติ code ที่เห็นนี้จะทำงานได้ตามปกติครับคือเวลาสั่งเปิดและ Save ไฟล์ EX_book.xlsm โปรแกรมจะทำการเปลี่ยนชื่อไฟล์ให้โดยอัตโนมัติ
แต่เมื่อผมเพิ่ม code ด้านล่าง
Code: Select all
Private Sub Workbook_Open()
Workbooks.Open Filename:="D:\EERS\EX_book.xlsm", Password:="", ReadOnly:=True
End Sub
การทำงานผิดไปจากเดิม
Code นี้อยู่ใน ไฟล์ EX_book.xlsm ,ใน Microsoft Excel Objects,ใน สมุดงานนี้
ความต้องการคือ ในกรณีมีการแก้ไขใน ห้าม Save ไฟล EX_book ทับในชื่อ EX_book.xlsm
ในกรณีมีการแก้ไขใน EX_book.xlsm นั้น หมายถึง เราเปิดไฟล์ EX_book ขึ้นมาเอง ไม่ใช่ ให้ไฟล์ CreateNewProject เป็นตัวเปิด
"เมื่อเราเปิดไฟล์ EX_book ขึ้นมา ผมหรือใครแก้ไขข้อมูลหรือ update ในไฟล์แล้ว โปรแกรมจะไม่ให้ Save ทับในชื่อ EX_book ให้ตั้งชื่ออื่น"
จากบรรทัดบนฟังดูแล้วไม่มีเหตุผล ทำไมเมื่อ update ข้อมูลแล้วถึง Save ทับไม่ได้ ใช่ไหมครับ
ถูกต้องครับ เป็นความคิดที่ไม่ได้เรื่อง
ถ้ามันไม่ยากเกินไปผมจำเป็นต้องใช้วิธีนี้เพื่อนำไปแก้ปัญหาให้กับโฟลตที่ชื่อ "code มีปัญหาครับ"
https://www.snasui.com/viewtopic.php?f=3&t=14826
ความเข้าใจของผมคิดว่า โคดด้านล่างนี้ไม่จำเป็นต้องใช้
Code: Select all
Private Sub Workbook_Open()
Workbooks.Open Filename:="D:\EERS\EX_book.xlsm", Password:="", ReadOnly:=True
End Sub
แต่ให้เขียน code ตอน Save ว่าห้ามSaveทับในชื่อ EX_book
ผมเชียนไม่ได้ครับ
น้องที่ทำงานที่ทำไฟล์นี้ก็ย้ายไปทำงานที่อื่นแล้ว
ขอขอบคุณครับ