กระทู้เก่าบอร์ด อ.Yeadram
2,531 8
URL.หัวข้อ /
URL
ขอคำสั่งสร้าง New folder ที่ mydocument
ขอเรียนถามดังนี้นะคะ
หนูอยากได้คำสั่งสร้าง Folder ให้อยู่ภายใน my documents ค่ะ แล้วหากนำไปใช้กับ WindowsXp ที่เป็นภาษาไทย อีกทั้ง Windows7 ที่ไม่ได้ใช้คำว่า my documents แล้ว จะเกิดปัญหาอะไรหรือเปล่าคะ
ขอบคุณค่ะ
หนูอยากได้คำสั่งสร้าง Folder ให้อยู่ภายใน my documents ค่ะ แล้วหากนำไปใช้กับ WindowsXp ที่เป็นภาษาไทย อีกทั้ง Windows7 ที่ไม่ได้ใช้คำว่า my documents แล้ว จะเกิดปัญหาอะไรหรือเปล่าคะ
ขอบคุณค่ะ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R11783
ใช้ฟังก์ชั่น mkdir(ระบุชื่อพาทที่ต้องการ....) ได้เลยครับ
2 @R11786
เท่าที่ทราบจริงๆแล้ว xp หรือ 7 ใช้ชื่อเดียวกัน แต่ใน 7 จะโชว์เป็น Documents ไม่ที my แต่ใจโฟล์เดอร์แท้ๆ ก็ยังเป็น my documents อยู่ ดูได้จาก path C:\Users\ชื่อ user\My Documents ใน win7
นี่เราพูดถึงค่ามาตรฐานของ windows ที่ไม่มีการแก้ไขนะครับ
ก็เลยคิดว่า ไม่ว่าเป็น xp หรือ win7 ใช้คำสั่งเดียวกันได้ครับ
คราวนี้จะใช้ code ยังไง เพราะ my documents เป็นโฟลเดอร์พิเศษ อ้างอิงกับชื่อ user ที่ไม่ตายตัว หรือบางทีก็เป็น Public my documents อะไรก็ไม่รู้แล้วแต่ผู้ใช้จะเซ็ท งง
แนวคิดก็เลยใช้คำสั่งหา path ของ my documents ก่อนครับ คือ
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MsgBox sPathUser
จากนั้นค่อยสร้างโฟลเดอร์ ตัวอย่างชื่อ Test
ก็จะได้ประมาณนี้
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MkDir (sPathUser & "\Test")
ไม่รู้ว่าตรงกับที่ต้องการหรือเปล่านะครับ ลองไปทดลองปรับดู
หมายเหตุ คำสั่งหา Path คำสั่งนี้ ลองรับ VB6 ขึ้นไป ซึ่งคิดว่าน่าจะใช้กันได้อยู่ครับ
นี่เราพูดถึงค่ามาตรฐานของ windows ที่ไม่มีการแก้ไขนะครับ
ก็เลยคิดว่า ไม่ว่าเป็น xp หรือ win7 ใช้คำสั่งเดียวกันได้ครับ
คราวนี้จะใช้ code ยังไง เพราะ my documents เป็นโฟลเดอร์พิเศษ อ้างอิงกับชื่อ user ที่ไม่ตายตัว หรือบางทีก็เป็น Public my documents อะไรก็ไม่รู้แล้วแต่ผู้ใช้จะเซ็ท งง
แนวคิดก็เลยใช้คำสั่งหา path ของ my documents ก่อนครับ คือ
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MsgBox sPathUser
จากนั้นค่อยสร้างโฟลเดอร์ ตัวอย่างชื่อ Test
ก็จะได้ประมาณนี้
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MkDir (sPathUser & "\Test")
ไม่รู้ว่าตรงกับที่ต้องการหรือเปล่านะครับ ลองไปทดลองปรับดู
หมายเหตุ คำสั่งหา Path คำสั่งนี้ ลองรับ VB6 ขึ้นไป ซึ่งคิดว่าน่าจะใช้กันได้อยู่ครับ
3 @R11788
ได้ผลตามที่ต้องการเลยค่ะอาจารย์
ขอบพระคุณอย่างยิ่งค่ะ
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MkDir (sPathUser & "\Test")
ขอบพระคุณอย่างยิ่งค่ะ
4 @R11789
แก้ไขหน่อยนะครับ
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MkDir (sPathUser & "Test")
ไม่ต้องมี \ ที่ Test แล้ว
หรืออาจย่อคำสั่งเป็นบรรทัดเดียว
MkDir (Environ$("USERPROFILE") & "\My Documents" & "\Test")
อีกเรื่อง อาจารย์ผมคือ หนังสือหลายๆเล่ม & เว็บนี้ & อาจารย์ Google ครับ ส่วนตัวแล้วยังห่างกับคำนี้มาก เรียกคุณก็พอนะครับ
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\my documents\"
MkDir (sPathUser & "Test")
ไม่ต้องมี \ ที่ Test แล้ว
หรืออาจย่อคำสั่งเป็นบรรทัดเดียว
MkDir (Environ$("USERPROFILE") & "\My Documents" & "\Test")
อีกเรื่อง อาจารย์ผมคือ หนังสือหลายๆเล่ม & เว็บนี้ & อาจารย์ Google ครับ ส่วนตัวแล้วยังห่างกับคำนี้มาก เรียกคุณก็พอนะครับ
5 @R11790
ขอบคุณค่ะ คุณ TTT
หนูเจอปัญหาต่อเนื่องค่ะ คือ..เมื่อมีโฟลเดอร์ชื่อเดียวกันอยู่ก่อนแล้ว
มันจะ Error ค่ะ เราจะแก้ปัญหานี้ได้อย่างไรคะ เช่น
สามารถทำให้ตรวจสอบก่อนว่า หากมีโฟลเดอร์อยู่ก่อนแล้ว ให้ระงับการสร้างโฟลเดอร์ใหม่ หรือสร้างใหม่ได้ โดยเพิ่มตัวเลขต่อท้ายเข้าไปเรื่อยๆ
ไม่ทราบว่าเป็นไปได้หรือไม่อย่างไรคะ
หนูเจอปัญหาต่อเนื่องค่ะ คือ..เมื่อมีโฟลเดอร์ชื่อเดียวกันอยู่ก่อนแล้ว
มันจะ Error ค่ะ เราจะแก้ปัญหานี้ได้อย่างไรคะ เช่น
สามารถทำให้ตรวจสอบก่อนว่า หากมีโฟลเดอร์อยู่ก่อนแล้ว ให้ระงับการสร้างโฟลเดอร์ใหม่ หรือสร้างใหม่ได้ โดยเพิ่มตัวเลขต่อท้ายเข้าไปเรื่อยๆ
ไม่ทราบว่าเป็นไปได้หรือไม่อย่างไรคะ
6 @R11791
จากปัญหานี้ก็ทำได้ 2 แบบ
1. เขียนคำสั่งตรวจสอบ ซึ่งจากการทดสอบใน Windows 7 ใช้ My Document ไม่ได้ ต้องเป็น Document เท่านั้น (อันนี้ผมก็ งง อยู่) ดังนั้น ถ้าใช้ใน Winxp ก็ใช้เป็น My Documents ถ้า Win7 ก็ใช้เป็น Documents
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\Documents"
If Dir(sPathUser & "\TEST", vbDirectory) = "" Then
MkDir (Environ$("USERPROFILE") & "\Documents" & "\TEST")
Else
MsgBox "มีชื่อโฟลเดอร์นี้อยู่แล้ว", vbOKOnly, "ชื่อโฟลเดอร์ซ้ำ"
End If
2. เขียนเป็น Error Code แจ้งให้ทราบ
On Error GoTo Err_Name_Folder
MkDir (Environ$("USERPROFILE") & "\My Documents" & "\TEST")
Err_Name_Folder:
MsgBox "มีชื่อโฟลเดอร์นี้อยู่แล้ว", vbOKOnly, "ชื่อโฟลเดอร์ซ้ำ"
Exit Sub
1. เขียนคำสั่งตรวจสอบ ซึ่งจากการทดสอบใน Windows 7 ใช้ My Document ไม่ได้ ต้องเป็น Document เท่านั้น (อันนี้ผมก็ งง อยู่) ดังนั้น ถ้าใช้ใน Winxp ก็ใช้เป็น My Documents ถ้า Win7 ก็ใช้เป็น Documents
Dim sPathUser As String
sPathUser = Environ$("USERPROFILE") & "\Documents"
If Dir(sPathUser & "\TEST", vbDirectory) = "" Then
MkDir (Environ$("USERPROFILE") & "\Documents" & "\TEST")
Else
MsgBox "มีชื่อโฟลเดอร์นี้อยู่แล้ว", vbOKOnly, "ชื่อโฟลเดอร์ซ้ำ"
End If
2. เขียนเป็น Error Code แจ้งให้ทราบ
On Error GoTo Err_Name_Folder
MkDir (Environ$("USERPROFILE") & "\My Documents" & "\TEST")
Err_Name_Folder:
MsgBox "มีชื่อโฟลเดอร์นี้อยู่แล้ว", vbOKOnly, "ชื่อโฟลเดอร์ซ้ำ"
Exit Sub
7 @R11792
หวังว่าคงเป็นแนวทางได้นะครับ คือผมไม่ได้ลองกับ OS Winxp ให้นะครับ ลองนำไปใช้ดู ปรับประมาณนี้ก็น่าจะได้
แต่ถ้าต้องการเขียนให้ใช้งานได้กับทั้งสองอย่าง คือ xp และ win7 ก็ต้องหาวิธีใช้คำสั่งตรวจสอบเวอร์ชั่นของวินโดวส์ที่ใช้งานอยู่ไปเลยนะครับ
ซึ่งมันก็จะยิ่งยุ่งไปอีกขั้นนึง ผมมีฟังก์ชั่นตรวจสองให้ไปต่อยอดเอาเองนะครับ เพื่อเป็นประโยชน์กับคุณและคนอื่นๆ
Option Explicit
Public Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Function getwinOS() As String
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
Dim getversion As String
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
With osinfo
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
getversion = "Windows 95"
Case 10
getversion = "Windows 98"
Case 90
getversion = "Windows Millennium"
End Select
Case 2
Select Case .dwMajorVersion
Case 3
getversion = "Windows NT 3.51"
Case 4
getversion = "Windows NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
getversion = "Windows 2000"
Else
getversion = "Windows XP"
End If
Case 6
getversion = "Windows 7"
End Select
Case Else
getversion = "Failed"
End Select
End With
getwinOS = UCase(getversion)
End Function
ตัวอย่าง การใช้งานบนฟอร์ม
Me.Text1 = getwinOS
ได้ค่าเป็น "WINDOWS 7" หรืออื่นๆ
แต่ถ้าต้องการเขียนให้ใช้งานได้กับทั้งสองอย่าง คือ xp และ win7 ก็ต้องหาวิธีใช้คำสั่งตรวจสอบเวอร์ชั่นของวินโดวส์ที่ใช้งานอยู่ไปเลยนะครับ
ซึ่งมันก็จะยิ่งยุ่งไปอีกขั้นนึง ผมมีฟังก์ชั่นตรวจสองให้ไปต่อยอดเอาเองนะครับ เพื่อเป็นประโยชน์กับคุณและคนอื่นๆ
Option Explicit
Public Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Public Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Function getwinOS() As String
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
Dim getversion As String
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
With osinfo
Select Case .dwPlatformId
Case 1
Select Case .dwMinorVersion
Case 0
getversion = "Windows 95"
Case 10
getversion = "Windows 98"
Case 90
getversion = "Windows Millennium"
End Select
Case 2
Select Case .dwMajorVersion
Case 3
getversion = "Windows NT 3.51"
Case 4
getversion = "Windows NT 4.0"
Case 5
If .dwMinorVersion = 0 Then
getversion = "Windows 2000"
Else
getversion = "Windows XP"
End If
Case 6
getversion = "Windows 7"
End Select
Case Else
getversion = "Failed"
End Select
End With
getwinOS = UCase(getversion)
End Function
ตัวอย่าง การใช้งานบนฟอร์ม
Me.Text1 = getwinOS
ได้ค่าเป็น "WINDOWS 7" หรืออื่นๆ
8 @R11793
โห..ดูโค้ดที่ R11792 นี้ไม่ง่ายเลยนะคะ
หนูขอใช้วิธีแจ้ง Error ให้ทราบตาม R11791 ก็คงเพียงพอแล้วล่ะ
ต้องขอขอบพระคุณอย่างยิ่งเลยค่ะคุณ TTT
หนูขอใช้วิธีแจ้ง Error ให้ทราบตาม R11791 ก็คงเพียงพอแล้วล่ะ
ต้องขอขอบพระคุณอย่างยิ่งเลยค่ะคุณ TTT
Time: 0.3605s