Ошибка компиляции VBA: неправильное количество аргументов или неверное назначение свойств при попытке разъединить ячейки excel на нескольких листах

Пишу макрос первый раз и столкнулся с проблемой не смог найти ответ на связь в сети. У меня есть файлы 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]

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме