我的 vba 非常基礎,這是我生成的第一個用戶表單,所以我一直在測驗它,因為我增加了復雜性。該表單的設計使我可以將登錄憑據輸入到查詢字串中,以將請求從我們的資料倉庫直接提取到 excel 中,而不是通過網站本身。
所以我創建了一個相當簡單的用戶表單,其中包含兩個文本框(用戶名和密碼)以及一個登錄和取消按鈕。然后,用戶表單將此資訊提供給類物件,該物件將提供更廣泛的請求模塊(該模塊已使用硬編碼值進行測驗并且可以作業)。
我在登錄時設定了一個簡單的檢查是否提供了資料(主代碼中有一個詳細的錯誤回圈,用于檢查不正確的細節),它只檢查兩個元素中的每一個是否都有一些文本,如果它們都應該卸載表單,因此在其余資料請求運行后它不會仍在螢屏上。
但是,我的代碼目前似乎有兩個問題,首先它不會將 if 檢查作為單獨的專案運行,因此如果用戶名通過 if 陳述句,則其余代碼似乎停止。其次,如果我填充了兩個欄位(應該滿足 IF 檢查),則表單不會卸載。我已經在我的代碼中復制了下面的登錄按鈕,如果一切都發生在下一個 if 開始之前,我顯然看不出它有什么問題,但是任何有助于解釋為什么這不起作用會很好。len 函式中呼叫的專案只是用戶表單中欄位的名稱,如果還有什么不清楚的,請大聲疾呼。
Private Sub Login_Click()
'check username is present
Dim corect_details As Integer
Dim uname As Integer
Dim pswrd As Integer
pswrd = 0
uname = 0
If Len(Username) = 0 Then
MsgBox "please enter your user name", vbOKOnly
Else
uname = 1
Exit Sub
End If
If Len(Password) = 0 Then
MsgBox "please enter a password", vbOKOnly
Exit Sub
Else
pswrd = 1
End If
details = pswrd uname
MsgBox details
If details = 2 Then
Unload Me
Else
End If
End Sub
uj5u.com熱心網友回復:
錯誤在這里:
If Len(Username) = 0 Then
MsgBox "please enter your user name", vbOKOnly
Else
uname = 1
Exit Sub 'should be above
End If
分支是正確的Else選擇,所以你不應該退出子。但是,使用Select Case陳述句怎么樣?
Private Sub Login_Click()
Select Case True
Case Len(UserName) = 0:
MsgBox "please enter your user name", vbOKOnly
Case Len(Password) = 0:
MsgBox "please enter a password", vbOKOnly
Case Else:
MsgBox "all good"
End Select
End Sub
uj5u.com熱心網友回復:
下面是幾年前制作的表格示例。我通常在程式端而不是表單端進行變數檢查,但正如@Kostas K. 提到的,當有人正確輸入他們的用戶名時,你會“退出子”。exit sub 也不會停止剩余的程序完成,它將正常繼續,這就是為什么最好在表單之外執行此邏輯,除非您想使用 'End' 而不是 'Exit Sub' 退出所有內容而不僅僅是當前子.
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub btnCancel_Click()
Unload Me
End
End Sub
Private Sub Login_Click()
Me.Hide
Me.Tag = vbOK
End Sub
Private Sub UserForm_Activate()
frmLogin.txtUserID.SetFocus
frmLogin.txtUserID = ReturnUserName()
End Sub
Private Sub UserForm_Initialize()
Me.StartUpPosition = 0
Me.Left = Application.Left (0.5 * Application.Width) - (0.5 * Me.Width)
Me.Top = Application.Top (0.5 * Application.Height) - (0.5 * Me.Height)
End Sub
Public Function ReturnUserName()
'Return the users name
Dim strUser As String, x As Integer
strUser = Space$(256)
x = GetUserName(strUser, 256)
strUser = RTrim(strUser)
ReturnUserName = Left(strUser, Len(strUser) - 1)
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492094.html
下一篇:加速回圈
