Page 1 of 1
password (VBA)
Posted: Thu Nov 02, 2017 11:30 am
by Benmore
ขอบสอบถามค่ะ ถ้าเมื่อกดปุ่มในหน้า Uniform_EGAS แล้วขึ้น Userform ให้กรอกรหัสต้องใส่โค้ดตรงไหนค่ะ
แล้วเมื่อเปิดไฟล์มาให้แสดงที่ชีท Uniform_EGAS แบบเต็มจอต้องเขียนโค้ดแบบไหนค่ะ
โค้ดด้านล่างถูกต้องไหมค่ะ Userform12
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
Re: password (VBA)
Posted: Thu Nov 02, 2017 8:45 pm
by snasui

กรุณาลำดับสิ่งที่ต้องการทำมาใหม่ว่าต้องการจะทำอะไรครับ
การอ้างถึง UserForm ให้อ้างชื่อในภาพ ไม่ใช่ชื่อที่เขียนไว้ตรง Caption ครับ
Re: password (VBA)
Posted: Thu Nov 02, 2017 9:48 pm
by Benmore
ถ้าเมื่อกดปุ่มในหน้า Uniform_EGAS

- 11.png (112.26 KiB) Viewed 434 times
แล้วขึ้น Userform ให้กรอกรหัส

- 22.png (104.05 KiB) Viewed 434 times
แล้วถึงขึ้นหน้าฟอร์มปกติค่ะ

- 33.png (111 KiB) Viewed 434 times
แล้วต้องเขียนโค้ดแบบไหนให้เวลาเปิดไฟล์มาแล้วแสดงหน้า Uniform_EGAS แบบเต็มจอ ค่ะ
Re: password (VBA)
Posted: Thu Nov 02, 2017 10:13 pm
by snasui

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
Re: password (VBA)
Posted: Thu Nov 02, 2017 10:48 pm
by Benmore
แล้วโค้ดตรงส่วน password ต้องทำยังไงค่ะ
ตามหัวข้อตัวอย่างที่แนบไปก่อนหน้านี้ค่ะ
Re: password (VBA)
Posted: Thu Nov 02, 2017 10:50 pm
by snasui

อธิบายมาใหม่ ทบทวนสิ่งที่ผมถามไปในโพสต์ #2 แล้วตอบมาตามนั้นในเรื่องที่เกี่ยวกับ Password ครับ
Re: password (VBA)
Posted: Thu Nov 02, 2017 10:58 pm
by Benmore
ลองแก้โค้ดตามที่บอกแล้วค่ะ แต่คือ ที่อยากให้เต็มจอไม่ใช่ Userform แต่เป็น ชีท Uniform_EGAS ตอนเปิดไฟล์มาค่ะ
Re: password (VBA)
Posted: Thu Nov 02, 2017 11:05 pm
by Benmore
เช่น เมื่อกดปุ่มในหน้าการเบิกชุดยูนิฟอร์มในหน้า Uniform_EGAS

- 11.png (112.26 KiB) Viewed 416 times
ก็จะแสดง Userform12 เพื่อให้กรอกข้อมูล

- 22.png (104.05 KiB) Viewed 416 times
แล้วเมื่อกรอกข้อมูลถูกต้องเรียบร้อยก็จะแสดงที่หน้า Userform1

- 33.png (111 KiB) Viewed 416 times
โค้ด 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
Re: password (VBA)
Posted: Thu Nov 02, 2017 11:17 pm
by snasui

จะต้องเขียน 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
Re: password (VBA)
Posted: Thu Nov 02, 2017 11:20 pm
by Benmore
พอจะมีตัวอย่างโค้ดไหมค่ะ อ่านแล้วงงๆไม่ค่อยเข้าใจ

Re: password (VBA)
Posted: Thu Nov 02, 2017 11:22 pm
by snasui

ตัวอยา่งคือที่เขียนไปตามด้านบน หากยังไม่เข้าใจก็ให้ศึกษาเพิ่มเติมก่อนครับ
Re: password (VBA)
Posted: Fri Nov 03, 2017 1:05 pm
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

username admin

pass 123
Re: password (VBA)
Posted: Fri Nov 03, 2017 7:50 pm
by snasui

กรณีต้องการซ่อน 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
Re: password (VBA)
Posted: Mon Nov 06, 2017 1:23 pm
by Benmore
ถ้ากำนดให้เมื่อเปิดไฟล์มาแล้วให้แสดงหน้า EGAS_Uniform เลยแล้วเมื่อต้องการให้แสดงชีทที่ถูกซ่อนไปต้องใสโค้ดตรงไหนเพิ่มค่ะ
Re: password (VBA)
Posted: Mon Nov 06, 2017 9:33 pm
by snasui

ตัวอย่าง Code ครับ
Code: Select all
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Uniform_EGAS").Activate
ActiveWindow.DisplayWorkbookTabs = False
End Sub
Re: password (VBA)
Posted: Thu Nov 09, 2017 8:19 pm
by Benmore
snasui wrote:
ตัวอย่าง Code ครับ
Code: Select all
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Uniform_EGAS").Activate
ActiveWindow.DisplayWorkbookTabs = False
End Sub
ถ้าต้องการปิดแบบถามด้วยว่าบันทึกหรือไม่ต้องเพิ่มตรงไหนค่ะ
Re: password (VBA)
Posted: Thu Nov 09, 2017 8:22 pm
by snasui

เขียนคำถามมาใหม่ครับ อธิบายสิ่งที่เป็นปัญหา สิ่งที่ต้องการให้เป็น ระบุ Code ที่เขียนมาเองแล้วจะได้ตอบต่อมาจากนั้น
Re: password (VBA)
Posted: Thu Nov 09, 2017 8:31 pm
by Benmore
snasui wrote:
เขียนคำถามมาใหม่ครับ อธิบายสิ่งที่เป็นปัญหา สิ่งที่ต้องการให้เป็น ระบุ 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
Re: password (VBA)
Posted: Thu Nov 09, 2017 8:47 pm
by snasui
Benmore wrote:แล้วถ้าต้องการให้ใส่ข้อมูลในฟอร์ม 12 ครั้งเดียว แล้วก็กดปุ่มอื่นๆได้โดยไม่ต้องกรอกข้อมูลต้องแก้ตรงไหนค่ะ

ให้สร้างตัวแปรมารับว่าได้กรอกข้อมูลถูกต้องแล้ว อาจจะเช่น
public pwdCorrect as boolean
และเมื่อกรอกข้อมูลถูกต้องแล้วให้กำหนด
pwdCorrect = True ในการกดปุ่มอื่นก็ให้มาเช็คว่า
pwdCorrect เป็น
True แล้วใช่หรือไม่ หากใช่ก็ไม่ต้องเปิด Form ให้กรอก Username และ Password อีก เช่นนี้เป็นต้นครับ
Benmore wrote:ปัญหาตอนนี้คือ ถ้ากดปุ่มปิดที่ฟอร์ม 12 แล้วไฟล์ก็จะถูกปิดไปเลย โดยไม่ถามว่าต้องการบันทึก หรือไม่
Code ที่เขียนไว้มี Save ไฟล์อยู่แล้ว ช่วยอธิบายคำว่าบันทึกว่าทำงานอย่างไร จะได้เข้าใจตรงกันครับ
Re: password (VBA)
Posted: Sun Nov 12, 2017 9:54 am
by Benmore
ตรงนี้ได้แล้ว ขอบตุณค่ะ