:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

password (VBA)

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

password (VBA)

#1

Post by Benmore »

ขอบสอบถามค่ะ ถ้าเมื่อกดปุ่มในหน้า Uniform_EGAS แล้วขึ้น Userform ให้กรอกรหัสต้องใส่โค้ดตรงไหนค่ะ
แล้วเมื่อเปิดไฟล์มาให้แสดงที่ชีท Uniform_EGAS แบบเต็มจอต้องเขียนโค้ดแบบไหนค่ะ
โค้ดด้านล่างถูกต้องไหมค่ะ Userform12 :ard:

Code: Select all

'Login
Private Sub CommandButton1_Click()
' On Error Resume Next
 If TextBox1 = "" Or TextBox2 = "" Then
        MsgBox "กรุณากรอกข้อมูลให้ครบถ้วน"
        Exit Sub
    End If
            If TextBox1.Text = Worksheets("Username").Range("A2").Value Then
            If TextBox2.Text = Worksheets("Username").Range("B2").Value Then
                passOK = True
                UserForm12.Hide
                TextBox1.Text = ""
                TextBox2.Text = ""
           Else
              MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อีกครั้ง"
            End If
        End If
    If passOK = False Then
        MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อีกครั้ง"
    End If
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#2

Post by snasui »

:D กรุณาลำดับสิ่งที่ต้องการทำมาใหม่ว่าต้องการจะทำอะไรครับ

การอ้างถึง UserForm ให้อ้างชื่อในภาพ ไม่ใช่ชื่อที่เขียนไว้ตรง Caption ครับ
You do not have the required permissions to view the files attached to this post.
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#3

Post by Benmore »

ถ้าเมื่อกดปุ่มในหน้า Uniform_EGAS
11.png
แล้วขึ้น Userform ให้กรอกรหัส
22.png
แล้วถึงขึ้นหน้าฟอร์มปกติค่ะ
33.png
แล้วต้องเขียนโค้ดแบบไหนให้เวลาเปิดไฟล์มาแล้วแสดงหน้า Uniform_EGAS แบบเต็มจอ ค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#4

Post by snasui »

:D UserForm ใน Excel ไม่เหมือนใน .Net ที่จะกำหนดหน้าต่างย่อขยายได้แบบง่าย ๆ ครับ

ตัวอย่างด้านล่างนี้เป็นการใช้ Windows API เข้ามาช่วย

ทำตามลำดับดังนี้

A. แทรก Module เข้ามาใหม่ เพื่อวาง Code Windows API ด้านล่าง

Code: Select all

Public Const SW_MAXIMIZED = 3
#If VBA7 Or Win64 Then
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, ByVal _
    lpWindowName As String) As Long
    
    Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal _
    hwnd As Long, ByVal nCmdShow As Long) As Long
    
#Else
    public Declare  Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As String, ByVal _
    lpWindowName As String) As Long
    
    public Declare  Function ShowWindow Lib "user32" (ByVal _
    hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
ฺB. ในขั้นตอนการเรียก UserForm ให้เขียน on error resume next เพื่อปิดการฟ้อง เช่นด้านล่าง

Code: Select all

Sub Button1_Click()
    'Sheet1.Activate
    On Error Resume Next
    UserForm1.Show
End Sub
C. ในตอน Initial ให้เพิ่ม Code ด้านล่าง

Code: Select all

Private Sub UserForm_Initialize()
    Call ClearData
    Sheet6.Activate
    'day
    comday.RowSource = "DATA!D2:D32"
    'month
    commonth.RowSource = "DATA!E2:E13"
    'year
    comyear.RowSource = "DATA!F2:F31"
    'description
    Combobox1.RowSource = "DATA!C2:C8"
    Call ShowMaximized
End Sub

Private Sub ShowMaximized()
    Call ShowWindow(FindWindow("ThunderDFrame", Me.Caption), SW_MAXIMIZED)
End Sub
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#5

Post by Benmore »

แล้วโค้ดตรงส่วน password ต้องทำยังไงค่ะ
ตามหัวข้อตัวอย่างที่แนบไปก่อนหน้านี้ค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#6

Post by snasui »

:D อธิบายมาใหม่ ทบทวนสิ่งที่ผมถามไปในโพสต์ #2 แล้วตอบมาตามนั้นในเรื่องที่เกี่ยวกับ Password ครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#7

Post by Benmore »

ลองแก้โค้ดตามที่บอกแล้วค่ะ แต่คือ ที่อยากให้เต็มจอไม่ใช่ Userform แต่เป็น ชีท Uniform_EGAS ตอนเปิดไฟล์มาค่ะ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#8

Post by Benmore »

เช่น เมื่อกดปุ่มในหน้าการเบิกชุดยูนิฟอร์มในหน้า Uniform_EGAS
11.png
ก็จะแสดง Userform12 เพื่อให้กรอกข้อมูล
22.png
แล้วเมื่อกรอกข้อมูลถูกต้องเรียบร้อยก็จะแสดงที่หน้า Userform1
33.png

โค้ด Userform12

Code: Select all

Private Sub CommandButton1_Click()
' On Error Resume Next
 If TextBox1 = "" Or TextBox2 = "" Then
        MsgBox "กรุณากรอกข้อมูลให้ครบ"
        Exit Sub
    End If
            If TextBox1.Text = Worksheets("Username").Range("A2").Value Then
            If TextBox2.Text = Worksheets("Username").Range("B2").Value Then
                passOK = True
                UserForm12.Hide
                TextBox1.Text = ""
                TextBox2.Text = ""
           Else
              MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อักครั้ง", vbInformation, "แจ้งเตือน"
            End If
        End If
    If passOK = False Then
        MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อักครั้ง", vbInformation, "แจ้งเตือน"
    End If
End Sub
Private Sub UserForm_Terminate()
    ThisWorkbook.Close
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#9

Post by snasui »

:D จะต้องเขียน Code ให้เรียก Userform12 เมื่อมีการคลิกแต่ละปุ่ม และเมื่อกรอกข้อมูล Username และ Password ถูกต้องก็จะเรียก UserForm ที่เกี่ยวข้องมาแสดง

สามารถกำหนดตัวแปรเพิ่มว่าปัจจุบันคลิกปุ่มใด และเมื่อคลิกปุ่มนั้นแล้วต้องการจะให้เรียก UserForm ใดหลังจากที่มีการกรอก Username และ Password ถูกต้องแล้ว

กำหนดตัวแปรเป็น Public CallForm as String ไว้ใน Module ใด ๆ และเมื่อคลิกปุ่มใด ๆ เช่นคลิกปุ่มแรกจะกำหนดตัวแปร CallForm เป็น CallForm = "UserForm1" เช่นนี้เป็นต้น

ในขั้นตอนของการกรอก Username และ Password ใน Userform12 จะเพิ่ม Code สำหรับการเรียก UserForm ที่จะใช้งานโดยพิจารณาตัวแปร CallForm ตัวอย่างเช่น

Code: Select all

select case callform
   case "UserForm1"
     Userform1.Show
  case "Userform2"
     UserForm2.Show
  '...   
end select
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#10

Post by Benmore »

พอจะมีตัวอย่างโค้ดไหมค่ะ อ่านแล้วงงๆไม่ค่อยเข้าใจ :)
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#11

Post by snasui »

:D ตัวอยา่งคือที่เขียนไปตามด้านบน หากยังไม่เข้าใจก็ให้ศึกษาเพิ่มเติมก่อนครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#12

Post by Benmore »

พอทำได้แล้วค่ะ ติดตรงที่ถ้ากดปิดแล้วให้ไฟล์นั้นปิดไปด้วยต้องแก้โค้ดตรงไหนค่ะ
แล้วเขียนโค้ดแบบไหนให้ไม่แสดงชีท จะแสดงก็ต่อเมื่อล็อคอินรหัสผ่านแล้วค่ะ

Code: Select all

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Cancel = True
       If MsgBox("ต้องการปิดไฟล์นี้ ใช่หรือไม่", vbYesNo) = vbYes Then
  End If
  End If
End Sub
:arrow: username admin
:arrow: pass 123
Uniform_EGAS(Ex).xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#13

Post by snasui »

:D กรณีต้องการซ่อน Sheet ทั้งหมดให้กำหนดตอนเปิดไฟล์ โดยเขียน Code ไว้ที่ ThisWorkbook เป็นด้านล่างครับ

Code: Select all

Private Sub Workbook_Open()
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
กรณีต้องการปิด Form แล้วให้ปิดไฟล์ไปด้วยสามารถกำหนด Code ตามด้านล่างครับ

Code: Select all

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Cancel = True
        If MsgBox("คุณต้องการปิดไฟลนี้ ใช่หรือไม่", vbYesNo) = vbYes Then
            ActiveWindow.DisplayWorkbookTabs = True
            ThisWorkbook.Close True
        End If
    End If
End Sub
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#14

Post by Benmore »

ถ้ากำนดให้เมื่อเปิดไฟล์มาแล้วให้แสดงหน้า EGAS_Uniform เลยแล้วเมื่อต้องการให้แสดงชีทที่ถูกซ่อนไปต้องใสโค้ดตรงไหนเพิ่มค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#15

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Private Sub Workbook_Open()
    ThisWorkbook.Worksheets("Uniform_EGAS").Activate
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#16

Post by Benmore »

snasui wrote::D ตัวอย่าง Code ครับ

Code: Select all

Private Sub Workbook_Open()
    ThisWorkbook.Worksheets("Uniform_EGAS").Activate
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
ถ้าต้องการปิดแบบถามด้วยว่าบันทึกหรือไม่ต้องเพิ่มตรงไหนค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#17

Post by snasui »

:D เขียนคำถามมาใหม่ครับ อธิบายสิ่งที่เป็นปัญหา สิ่งที่ต้องการให้เป็น ระบุ Code ที่เขียนมาเองแล้วจะได้ตอบต่อมาจากนั้น
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#18

Post by Benmore »

snasui wrote::D เขียนคำถามมาใหม่ครับ อธิบายสิ่งที่เป็นปัญหา สิ่งที่ต้องการให้เป็น ระบุ Code ที่เขียนมาเองแล้วจะได้ตอบต่อมาจากนั้น
ปัญหาตอนนี้คือ ถ้ากดปุ่มปิดที่ฟอร์ม 12 แล้วไฟล์ก็จะถูกปิดไปเลย โดยไม่ถามว่าต้องการบันทึก หรือไม่
แล้วถ้าต้องการให้ใส่ข้อมูลในฟอร์ม 12 ครั้งเดียว แล้วก็กดปุ่มอื่นๆได้โดยไม่ต้องกรอกข้อมูลต้องแก้ตรงไหนค่ะ

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
 If TextBox1 = "" Or TextBox2 = "" Then
        MsgBox "กรุณากรอกข้อมูลให้ครบถ้วน"
        Exit Sub
    End If
            If TextBox1.Text = Worksheets("Username").Range("A2").Value Then
            If TextBox2.Text = Worksheets("Username").Range("B2").Value Then
                passOK = True
                UserForm12.Hide
                TextBox1.Text = ""
                TextBox2.Text = ""
           Else
              MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อีกครั้ง", vbInformation, "แจ้งเตือน"
            End If
        End If
    If passOK = False Then
        MsgBox "รหัสผ่านไม่ถูกต้อง กรุณาพิมพ์ใหม่อีกครั้ง", vbInformation, "แจ้งเตือน"
    End If
    Select Case CallForm
   Case "UserForm1"
     UserForm1.Show
  Case "Userform2"
     UserForm2.Show
     Case "UserForm3"
     UserForm3.Show
     Case "UserForm5"
     UserForm5.Show
     Case "UserForm6"
     UserForm6.Show
     Case "UserForm7"
     UserForm7.Show
     Case "UserForm8"
     UserForm8.Show
     Case "UserForm9"
     UserForm9.Show
     Case "UserForm11"
     UserForm11.Show
     Case "UserForm12"
     UserForm12.Show
     End Select
End Sub
Private Sub UserForm_Terminate()
    ThisWorkbook.Close
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        Cancel = True
        If MsgBox("คุณต้องการปิดไฟล์นี้ ใช่หรือไม่", vbYesNo) = vbYes Then
            ActiveWindow.DisplayWorkbookTabs = True
            ThisWorkbook.Close True
        End If
    End If
End Sub

User avatar
snasui
Site Admin
Site Admin
Posts: 30744
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: password (VBA)

#19

Post by snasui »

Benmore wrote:แล้วถ้าต้องการให้ใส่ข้อมูลในฟอร์ม 12 ครั้งเดียว แล้วก็กดปุ่มอื่นๆได้โดยไม่ต้องกรอกข้อมูลต้องแก้ตรงไหนค่ะ
:D ให้สร้างตัวแปรมารับว่าได้กรอกข้อมูลถูกต้องแล้ว อาจจะเช่น

public pwdCorrect as boolean

และเมื่อกรอกข้อมูลถูกต้องแล้วให้กำหนดpwdCorrect = True ในการกดปุ่มอื่นก็ให้มาเช็คว่า pwdCorrect เป็น True แล้วใช่หรือไม่ หากใช่ก็ไม่ต้องเปิด Form ให้กรอก Username และ Password อีก เช่นนี้เป็นต้นครับ
Benmore wrote:ปัญหาตอนนี้คือ ถ้ากดปุ่มปิดที่ฟอร์ม 12 แล้วไฟล์ก็จะถูกปิดไปเลย โดยไม่ถามว่าต้องการบันทึก หรือไม่
Code ที่เขียนไว้มี Save ไฟล์อยู่แล้ว ช่วยอธิบายคำว่าบันทึกว่าทำงานอย่างไร จะได้เข้าใจตรงกันครับ
Benmore
Bronze
Bronze
Posts: 254
Joined: Tue Sep 05, 2017 9:51 am

Re: password (VBA)

#20

Post by Benmore »

ตรงนี้ได้แล้ว ขอบตุณค่ะ
Post Reply