[英]Change Sub to Function then Call in vba
我有一個密碼生成器Sub,我想將它更改為一個函數,並在宏中使用它來生成一個從B2開始的列,每個單元格后面都是一個唯一的密碼。
它唯一能做的就是刪除我的B1 Header單元格。
謝謝
我有Sub:
Sub RandomPassword()
Dim i As Integer
For i = 1 To 8
If i Mod 2 = 0 Then
strPassword = Chr(Int((122 - 48 + 1) * Rnd + 48)) & strPassword
Else
strPassword = Int((9 * Rnd) + 1) & strPassword
End If
Next i
MsgBox strPassword
End Sub
我的嘗試並將其轉換為函數:
Function RandomPassword(strPassword As String) As String
Dim i As Integer
For i = 1 To 8
If i Mod 2 = 0 Then
strPassword = Chr(Int((122 - 48 + 1) * Rnd + 48)) & strPassword
Else
strPassword = Int((9 * Rnd) + 1) & strPassword
End If
Next i
End Function
我的呼喚:
Sub qqq()
Dim rng As range
Dim lastRow As Long
With Sheets("sheet1")
lastRow = .range("B" & .Rows.Count).End(xlUp).Row
End With
For Each rng In Sheets("Sheet1").range("B2:B" & lastRow)
rng.Value = RandomPassword(rng.Value)
Next
End Sub
在End Function
之前,您需要在函數中添加一行:
RandomPassword=strPassword
否則,您的函數將沒有值,導致空單元格。
您需要將strPassword
變量的值strPassword
函數RandomPassword
Function RandomPassword(ByVal strPassword As String) As String
Dim i As Integer
For i = 1 To 8
If i Mod 2 = 0 Then
strPassword = Chr(Int((122 - 48 + 1) * Rnd + 48)) & strPassword
Else
strPassword = Int((9 * Rnd) + 1) & strPassword
End If
Next i
RandomPassword = strPassword
End Function
同樣在下面的過程中,您將獲得column B
列中最后一次使用的行,然后使用隨機密碼覆蓋它們。 我覺得你需要獲得column A
的最后一行。
Sub qqq()
Dim rng As range
Dim lastRow As Long
With Sheets("sheet1")
lastRow = .range("A" & .Rows.Count).End(xlUp).Row
End With
For Each rng In Sheets("Sheet1").range("B2:B" & lastRow)
rng.Value = RandomPassword(rng.Value)
Next
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.