Ошибка компиляции VBA: неверное количество аргументов или неверное присвоение свойства При попытке объединить ячейки Excel на нескольких листах - PullRequest
0 голосов
/ 27 мая 2019

Я пишу макрос впервые и столкнулся с проблемой. Мне не удалось найти ответ на онлайн ссылку . У меня есть файлы Excel со слитыми ячейками, которые необходимо разложить, а затем продублировать значение объединенной ячейки для всех вновь образованных разделенных ячеек, а затем преобразовать этот файл из .xslx в .csv. Я нашел код, который делает именно то, что я хочу, но этот код объединяет только рабочий лист (лист, над которым я сейчас работаю). Я попытался поместить эту функцию в цикл по всем листам, однако, когда я запускаю цикл, я получаю ошибку компиляции: «Неверное количество аргументов или неверное присвоение свойства» Я был бы благодарен за некоторое понимание того, почему это происходит, как решить это или любую другую идею о том, как это сделать. Спасибо

Это функция, которую я скопировал, и она работает для одного листа

Public Sub UnMergeFill()

Dim cell As Range, joinedCells As Range

    For Each cell In ThisWorkbook.ActiveSheet.UsedRange
        If cell.MergeCells Then
            Set joinedCells = cell.MergeArea
            cell.MergeCells = False
            joinedCells.Value = cell.Value
        End If
    Next

    End Sub

это функция, которую я написал и возвращает ошибку

 Sub UnMergeFillAllSheets()
        Dim ws As Worksheet
        For Each ws In Worksheets
            ws.Select
            Call UnMergeFill(ws)
        Next
    End Sub

ввод: [[0] [0] [0] [0]] [1] [1]

когда нули находятся в одной объединенной ячейке

вывод: [0] [0] [0] [0] [1] [1]

1 Ответ

0 голосов
/ 27 мая 2019

Call UnMergeFill(ws) вызывает процедуру UnMergeFill, передавая ws в качестве аргумента ...

Public Sub UnMergeFill()

... но процедура UnMergeFill делаетне принимать никаких параметров.Следовательно, «неправильное количество аргументов».

Вам нужно изменить сигнатуру UnMergeFill, чтобы принять Worksheet параметр:

Public Sub UnMergeFill(ByVal ws As Worksheet)

И тогда нет необходимости .Select это больше:

    For Each ws In Worksheets
        UnMergeFill ws
    Next

За исключением того, что теперь вам нужно UnMergeFill, чтобы отработать заданный параметр Worksheet:

For Each cell In ws.UsedRange

Если вы хотите, чтобы UnMergeFillпо-прежнему работать независимо от того, что ActiveSheet не имеет аргументов, вы можете сделать параметр необязательным:

Public Sub UnMergeFill(Optional ByVal ws As Worksheet = Nothing)

... и затем проверить, была ли вызвана процедура с допустимой ссылкой на объект:

    If ws Is Nothing Then Set ws = ActiveSheet
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...