То, что я хочу сделатьУдаление ссылки из скопированного листа
Я хочу код в моей книге (wbDestination), который открывает еще одну книгу (wbBosOriginal) и копирует весь лист в качестве значений (wbBosOriginal имеет много кода в нем, в модулях и в рабочем листе, о которых идет речь, и я не хочу этого кода, потому что он ссылается на материал в wbB, который не существует в wbDestination). У меня возникли большие проблемы при вставке в качестве значений, поскольку они не будут вставлять скрытые столбцы и строки. Поэтому я решил импортировать весь лист вместо этого.
То, что я пытался и что случилось с ним
Вот блок кода, который я использовал, чтобы скопировать лист в книге назначения, в последней позиции индекса. Проблема в том, что некоторые ссылки все еще существуют для старой книги (формулы, списки проверки, условное форматирование). Я удалил все эти ссылки, но STILL, когда я вставляю лист успешно, сохраняю и снова открываю, у меня есть ошибка, говорящая, что какой-то контент не читается. Я считаю, что есть еще некоторые элементы, связанные со старой книгой.
Set wbBosOriginal = Workbooks.Open(strChosenPath, ReadOnly:=True)
With wbBosOriginal.Sheets("BOS")
.Visible = True
'Pastes the ws in last position in wbDestination
.Copy after:=wbDestination.Sheets(wbDestination.Worksheets.Count)
Set wsNewBos = Worksheets(Worksheets.Count)
'Deletes VBA code in the copied sheet
ThisWorkbook.VBProject.VBComponents.Item(wsNewBos.CodeName).CodeModule.DeleteLines 1, _
ThisWorkbook.VBProject.VBComponents.Item(wsNewBos.CodeName).CodeModule.CountOfLines
End With
Рабочий лист успешно вставлен без кода в нем со всем остальным, что было ранее. Затем я удаляю все формулы, условное форматирование и списки проверки. Даже после их удаления, я все равно получаю сообщение об ошибке при открытии книги.
Мой вопрос
Помимо условного форматирования, списки проверки, VBA кода и формул, связывающих рабочий лист, который был наклеен на новую книгу, что другие элементы могут вызвать книгу из отверстия в ремонтном режиме каждый раз, когда из-за существующих ссылок на старую книгу?
Если мой вопрос не ясен, прокомментируйте, и я уточню.
Это не по нескольким причинам. Во-первых, UsedRange очень ненадежна и не обнаруживает реальный диапазон использования на моем листе. См. Http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba. Во-вторых, в исходном рабочем листе (я только копирую 1 из листов) есть группировки строк. Когда рабочая книга открывается, группировки могут быть закрыты или не быть закрыты. Даже установка всех строк в hidden = false оставляет их с высотой = 0, а изменение высоты строк в 2000 строк выполняется вечно даже с помощью '.rows (" 1: 2000 "). RowHeight = 18'. Строки с высотой 0, похоже, не копируются. –
Мне удалось отобразить все строки, сначала развернув все группы строк с помощью. .Outline.ShowLevels RowLevels: = 3'. Теперь я могу копировать/вставлять значения без пропусков строк. По какой-то причине, группируя винты с свойством '.Hidden'! Рад это разобраться. Я все еще оставляю вопрос открытым, потому что он все еще действителен. –
@DavidG Рад, что вы нашли решение! – RGA