VBA: макрос, назначенный объекту, при нажатии на действие он входит в код и вызывает -неверное количество аргументов или неправильное присвоение свойства - PullRequest
0 голосов
/ 31 октября 2018

Мой макрос VBA назначен изображению из Интернета, которое я только что вставил в свой лист

Предполагается, что мой макрос сделает это:

У меня есть 40 столбцов с информацией, я хочу добавить столбец между столбцами 1 и 2, 2 и 3 .. и так далее

когда я нажимаю на свое изображение, превосходно шагаю в код, и однажды в этом окне появляется маленькое окно со словами:

неверное количество аргументов или неверное присвоение свойства

также выделяя первую строку, где находится основное тело, я имею в виду эту часть:

Столбцы ( "B: B")

.

Не могли бы вы помочь мне решить это? Извините за мой любительский вопрос

Sub columns()
'
' columns Macro
'

'
    columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("D:D").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("F:F").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("H:H").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("J:J").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("L:L").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("N:N").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("P:P").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("R:R").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("T:T").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("V:V").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("X:X").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("Z:Z").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AB:AB").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AD:AD").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AF:AF").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AH:AH").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AJ:AJ").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AL:AL").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AN:AN").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AP:AP").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AR:AR").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AT:AT").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AV:AV").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AX:AX").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("AZ:AZ").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveWindow.SmallScroll ToRight:=34
    columns("BB:BB").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BD:BD").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BF:BF").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BH:BH").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BJ:BJ").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BL:BL").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BN:BN").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BP:BP").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BR:BR").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BT:BT").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BV:BV").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BX:BX").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    columns("BZ:BZ").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Ответы [ 2 ]

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

Хорошо, попробуй! Изменение вашего кода может выглядеть так:

Sub insert_column_nt_step()
Dim colinsert As Long
Dim Number_Step As Long

Number_Step = 2 'Number of step to jump after every insert

For colinsert = 2 To 78 Step Number_Step 'Start from Column 2 (Column B), to Column 78 (Column BZ)
    Columns(colinsert).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    'I actually kept the recording values.. don't know if you want to keep the formatting etc...
Next colinsert
End Sub
0 голосов
/ 31 октября 2018

Вы можете взять весь предоставленный вами код и урезать его до:

Sub insertColumns()

    Dim ws As Worksheet, i As Long
    Set ws = ThisWorkbook.Worksheets(1)

    For i = 2 To 78 Step 2
       ws.Columns(i).Insert
    Next

End Sub

Легко читается - (что облегчает отладку) и не используется .Select.

Замените 1 in Worksheets(1) на либо номер индекса листа , либо на имя листа (обернутые в двойные кавычки, Worksheets("Sheet1")


Вы можете сделать это динамическим, если хотите:

Sub insertColumns()

    Dim ws As Worksheet, i As Long
    Set ws = ThisWorkbook.Worksheets(1)

    For i = 2 To LastColumn(ws) * 2 Step 2
       ws.Columns(i).Insert
    Next

End Sub

Function LastColumn(ws As Worksheet, Optional rowNum As Long = 1)
    With ws
        LastColumn = .Cells(rowNum, .Columns.Count).End(xlToLeft).Column
    End With
End Function

Это будет определять, сколько используемых столбцов у вас есть, и проходить через них - просто умножьте LastColumn на 2, так как вы добавляете столбцы.

...