Вы должны указать, в какую книгу вы хотите добавить рабочую таблицу и указать рабочую книгу для всех диапазонов
Dim wsNew As Worksheet
Set wsNew = ActiveWorkbook.Worksheets.Add
wsNew.Name = "Password"
Вы можете получить доступ к диапазону на этом рабочем листе с помощью
wsNew.Range("A1").FormulaR1C1 = "1"
Примечаниечто вам следует избегать использования .Select
, потому что это плохая практика (см. Как избежать использования Select в Excel VBA ).
Примените эту технику (укажите рабочий лист и удалите select) к каждому Range
, Cells
, Columns
, Rows
и т. д.
Также обратите внимание, что вы можете значительно уменьшить все эти операторы Range("B1").Value = "A"
более короткий цикл:
Const Letters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!£$%&*"
Dim iLetter As Long
For iLetter = 1 To Len(Letters)
wsNew.Cells(iLetter, "B").Value = Mid$(Letters, iLetter, 1)
Next iLetter
В итоге вы получите нечто подобное, которое должно работать:
Sub Password_Generator()
Application.ScreenUpdating = False
Dim wsNew As Worksheet
On Error GoTo ERR_ADDSHEET 'catch error if worksheet exists
Set wsNew = Worksheets.Add
On Error GoTo 0 're-enable error reporting
wsNew.Name = "Password"
Const Letters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!£$%&*"
Dim iLetter As Long
For iLetter = 1 To Len(Letters)
wsNew.Cells(iLetter, "B").Value = Mid$(Letters, iLetter, 1)
Next iLetter
With wsNew
.Range("A1").Value = "1"
.Range("A2").Value = "2"
.Range("A3").Value = "3"
.Range("A1:A3").AutoFill Destination:=.Range("A1:A" & Len(Letters)), Type:=xlFillDefault
.Columns("A:B").EntireColumn.Hidden = True
.Columns("G").ColumnWidth = 35
.Range("G2").Value = "PASSWORD"
.Range("G4").Value = "Select F9 to generate a new password"
.Range("G3").Formula = "=VLOOKUP(RANDBETWEEN(1,68),A:B,2,0)&VLOOKUP(RANDBETWEEN(1,68),A:B,2,0)&VLOOKUP(RANDBETWEEN(1,68),A:B,2,0)"
.Range("G2:G4").HorizontalAlignment = xlCenter
.Range("G2:G4").VerticalAlignment = xlCenter
.Range("G2").Font.Bold = True
.Range("G4").Font.Italic = True
.Range("G4").Font.Size = 9
.Range("G3").Copy
End With
ERR_ADDSHEET:
Application.ScreenUpdating = True
If Err.Number > 0 Then MsgBox "Worksheet could not be added.", vbCritical
End Sub