ขอคำสั่งสร้าง New folder ที่ mydocument
กระทู้เก่าบอร์ด อ.Yeadram

 2,475   8
URL.หัวข้อ / URL
ขอคำสั่งสร้าง New folder ที่ mydocument

ขอเรียนถามดังนี้นะคะ

หนูอยากได้คำสั่งสร้าง 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 ขึ้นไป ซึ่งคิดว่าน่าจะใช้กันได้อยู่ครับ

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 ครับ ส่วนตัวแล้วยังห่างกับคำนี้มาก เรียกคุณก็พอนะครับ
5 @R11790
ขอบคุณค่ะ คุณ TTT

หนูเจอปัญหาต่อเนื่องค่ะ คือ..เมื่อมีโฟลเดอร์ชื่อเดียวกันอยู่ก่อนแล้ว
มันจะ 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
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" หรืออื่นๆ
8 @R11793
โห..ดูโค้ดที่ R11792 นี้ไม่ง่ายเลยนะคะ

หนูขอใช้วิธีแจ้ง Error ให้ทราบตาม R11791 ก็คงเพียงพอแล้วล่ะ

ต้องขอขอบพระคุณอย่างยิ่งเลยค่ะคุณ TTT
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2689s