#excel #vba #excel-2010
#excel #vba #excel-2010
Вопрос:
У меня много листов, и в настоящее время каждые 3 месяца мне приходится просматривать их один за другим, чтобы обновить информацию всего в нескольких ячейках.
Было бы здорово, если бы я мог создать основной исходный файл, содержащий эти несколько обновляемых ячеек, с которыми связаны все мои рабочие листы, чтобы я мог просто обновить этот файл, и все мои файлы затем обновились бы.
Единственная проблема, с которой я сталкиваюсь, заключается в том, что я затем отправляю эти рабочие листы клиентам по электронной почте, каждый клиент получает определенный рабочий лист.
Это означало бы, что локальных ссылок на основной исходный файл больше не будет, и я предполагаю, что будут ошибки. Есть ли какой-либо способ, которым я мог бы связать свои файлы, по желанию, с основным файлом, иметь возможность обновлять основной файл и соответствующим образом обновлять все остальные файлы, но затем отправлять клиенту только один файл и сохранять значения из основного файла.
Я надеюсь, что это имеет смысл! То, что я хочу сделать, довольно просто, просто немного сложно выразить это словами.
Любая помощь или совет были бы великолепны!
Комментарии:
1. Это невозможно сделать простым связыванием. Вам пришлось бы написать фрагмент кода VBA.
Ответ №1:
Можно подумать, что есть простой способ сделать это «из коробки», но это создает проблему. Это не очень элегантное решение показывает, как копировать ячейки или диапазоны из основной книги, которая должна быть открыта при обновлении клиентских таблиц. Очевидно, что у пользователя-клиента не будет основной рабочей книги, и поэтому в этом случае макрос автоматически завершается с ошибкой. Поместите этот код в свой модуль ThisWorkbook каждой клиентской книги.
Private Sub Workbook_Open()
On Error Resume Next
Dim master As Workbook
Set master = Workbooks("master.xlsm")
If master Is Nothing Then
'the client is probably opening the wbook. do nothing
Else 'copy your stuff here
With Workbooks("master.xlsm")
.Worksheets("Sheet1").Range("A1:D4").Copy _
Destination:=Worksheets("Sheet1").Range("A1:D4")
End With
End If
End Sub
Ответ №2:
Надеюсь, я правильно понял вашу проблему. Что мы делаем, так это сохраняем рабочую книгу как другую рабочую книгу с другим именем файла. Обычно мы добавляем «_sent.xlsx «к имени файла рабочей книги. Затем откройте его, перейдите к данным, отредактируйте ссылки и разорвите все ссылки. В рабочей книге останутся только «значения». Сохраните рабочую книгу, и вы сможете отправить ее, не беспокоясь о значениях, которые будут нарушены при ее открытии. И у вас все еще есть исходный файл, если вам нужно что-либо изменить.