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


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