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