VBA: неверное количество аргументов или неправильное присвоение свойства - PullRequest
0 голосов
/ 16 октября 2018

У меня есть приведенный ниже код, который отлично работает в файле .xlsm, однако, когда я копирую код в файл Personal.xls, он больше не работает.Я искал на форуме и нашел похожие темы, однако ни одна из них, похоже, не содержит решения моей проблемы.

Я уверен, что вы можете видеть, что мой код создает пароль случайным образом (журнал из 20 символов, но я изменил формулу, чтобы показать только 3 символа для этой цели).

Sub Password_Generator()

Application.ScreenUpdating = False

Sheets.Add.Name = "Password"

Range("B1").Value = "A"
Range("B2").Value = "B"
Range("B3").Value = "C"
Range("B4").Value = "D"
Range("B5").Value = "E"
Range("B6").Value = "F"
Range("B7").Value = "G"
Range("B8").Value = "H"
Range("B9").Value = "I"
Range("B10").Value = "J"
Range("B11").Value = "K"
Range("B12").Value = "L"
Range("B13").Value = "M"
Range("B14").Value = "N"
Range("B15").Value = "O"
Range("B16").Value = "P"
Range("B17").Value = "Q"
Range("B18").Value = "R"
Range("B19").Value = "S"
Range("B20").Value = "T"
Range("B21").Value = "U"
Range("B22").Value = "V"
Range("B23").Value = "W"
Range("B24").Value = "X"
Range("B25").Value = "Y"
Range("B26").Value = "Z"
Range("B27").Value = "a"
Range("B28").Value = "b"
Range("B29").Value = "c"
Range("B30").Value = "d"
Range("B31").Value = "e"
Range("B32").Value = "f"
Range("B33").Value = "g"
Range("B34").Value = "h"
Range("B35").Value = "i"
Range("B36").Value = "j"
Range("B37").Value = "k"
Range("B38").Value = "l"
Range("B39").Value = "m"
Range("B40").Value = "n"
Range("B41").Value = "o"
Range("B42").Value = "p"
Range("B43").Value = "q"
Range("B44").Value = "r"
Range("B45").Value = "s"
Range("B46").Value = "t"
Range("B47").Value = "u"
Range("B48").Value = "v"
Range("B49").Value = "w"
Range("B50").Value = "x"
Range("B51").Value = "y"
Range("B52").Value = "z"
Range("B53").Value = "1"
Range("B54").Value = "2"
Range("B55").Value = "3"
Range("B56").Value = "4"
Range("B57").Value = "5"
Range("B58").Value = "6"
Range("B59").Value = "7"
Range("B60").Value = "8"
Range("B61").Value = "9"
Range("B62").Value = "0"
Range("B63").Value = "!"
Range("B64").Value = "£"
Range("B65").Value = "$"
Range("B66").Value = "%"
Range("B67").Value = "&"
Range("B68").Value = "*"

Range("A1").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "2"
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "3"
    Range("A1:A3").Select
    Selection.AutoFill Destination:=Range("A1:A68"),       Type:=xlFillDefault
    Range("A1:A68").Select

Columns("A:B").Select
    Selection.EntireColumn.Hidden = True

Columns("G").Select
    Selection.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").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With

    Range("G2").Select
    Selection.Font.Bold = True
    Range("G4").Select
    Selection.Font.Italic = True
    Selection.Font.Size = 9
    Range("G3").Copy

Application.ScreenUpdating = False

End Sub

1 Ответ

0 голосов
/ 16 октября 2018

Вы должны указать, в какую книгу вы хотите добавить рабочую таблицу и указать рабочую книгу для всех диапазонов

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...