檔案附件
http://mega.nz/#!6JFkmYgJ!t45SUV7K2eJT2Q9FlBFxt3A3KyHNJIlfEpRUqx7HHUU

小弟想在公司的EXCEL檔案裡加入個人獨立帳密登入方式
目前是每登入一次,會寫入一筆資料
反之是登入錯誤也會寫入資料
小弟目前遇到的問題是 登入錯誤無法跟正確登入一樣 持續往下一列寫入資料
而是在同一儲存格裡覆蓋原有資料
能否請各位高手幫小弟解惑呢???

紅色部份是小弟後來增加要判斷,登入錯誤要寫入的地方 (原本是沒有的)

Private Sub CommandButton1_Click()
Sheet2.Visible = True
Sheets("交接事項").Activate
Dim UserId As String
Dim N As Long
Dim FD As Range
Set FD = Range("a65536").End(xlUp).Offset(1, 0)
Dim Ar, a1, i% '此處宣告3個欄位
a1 = TextBox1
Ar = Array(a1) '欄位儲存於陣列
UserId = TextBox1.Value
If UserId = "" Then
MsgBox "請輸入ID"
GoTo 101
End If
For N = 1 To 300

If Sheet3.Cells(N, 5).Value = UserId Then
If Sheet3.Cells(N, 6).Value = TextBox2.Value Then
MsgBox "登入成功"
if a1 "" Then '判斷所有值都不等於空白
i = 2 '第一列開始
Do Until Cells(i, 1) = "" 'A欄為空白則停止迴圈
i = i + 1 '向下一列
Loop
Cells(i, 3).Resize(, 1) = Ar 'A欄空白向右擴展成欄位數量

FD = Date '往右一格寫入當前時間
FD.Offset(0, 1) = Time '往右二格寫入txtID的資料

End If
UserForm1.Hide
GoTo 101
Else
MsgBox "登入失敗"

i = 2 '第一列開始
Do Until Cells(i, 1) = "" 'A欄為空白則停止迴圈
i = i + 1 '向下一列
Loop
Cells(i, 10).Resize(, 1) = Ar 'A欄空白向右擴展成欄位數量

FD.Offset(0, 8) = Date '往右一格寫入當前時間
FD.Offset(0, 9) = Time '往右二格寫入txtID的資料


End If

GoTo 101
Exit For
End If
end if
Next
GoTo 100

100
MsgBox "帳號錯誤"
'GoTo 1100 '為統計登入正確或強制登入記錄,故登入錯誤也列入資料
UserForm1.TextBox2.Value = ""
UserForm1.TextBox1.Value = ""
'Sheets("sheet1").Activate '停留在登入頁面避免跑到帳密頁面
Exit Sub

101
UserForm1.Hide

UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""

'Sheets("sheet1").Activate '停留在登入頁面避免跑到帳密頁面

End Sub

Private Sub CommandButton2_Click()
UserForm1.Hide
UserForm1.TextBox1.Value = ""
UserForm1.TextBox2.Value = ""
End Sub
好久沒看到有人自己寫出大部份程式碼了
比起那些只會丟問題上來問,拿到答案就不回應的好太多了
看在您那麼認真的份上,幫您一下

這一堆程式碼雖然沒什麼大問題

但您定義的陣列太大…
很多1行就可以處理好的,您卻用迴圈
goto 用太多,程式太亂,維護困難

參考一下我改寫的吧,登入+記錄功能,幫您從60多行程式 縮短到 8行了
除了在sheet3要先定義一個陣列名稱自動抓範圍大小之外,沒用到什麼特殊語法,您一定看的懂的

剩下的隱藏工作表、vba加密碼、禁止修改…等等的功能,您再自行修改、增加吧
不過,您這種作法,純記錄而己,基本上沒什麼安全性

p.s.帳號如果使用“純數字”,程式要修改
附加壓縮檔: 201601/mobile01-3c548828193ee833fe74ebd76c146730.zip

snare wrote:
好久沒看到有人自己...(恕刪)


慢了點回覆 非常感謝幫忙 沒想到能利用簡短的幾行程式碼
就能替代小弟原有攏長的程式碼
真是令小弟獲益良多

zjh835 wrote:
小弟原有攏長的程式碼...(恕刪)


寫到這麼長的程式碼,還可以正常執行,沒什麼問題

就代表您有一定的水準了,最重要邏輯處理也不錯

您基本功有了,現在只是經驗不足,以後進步會很快的

程式碼從,攏長=>縮短=>精簡=>效率化,我也是這樣走過來的
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!