Как заново открыть книгу Excel при выполнении макроса VBA, который в ней содержится? - PullRequest
3 голосов
/ 17 августа 2011

Я сделал все что угодно с моим файлом Excel, и в конце мне нужно вернуться к последней сохраненной версии. Поэтому я закрываю и снова открываю свой файл Excel без сохранения, что работает. Перед закрытием книги я скопировал диапазон ячеек (созданных с использованием некоторой сортировки, фильтрации, прочей информации и т. Д.), И теперь мне нужно вставить их в конец файла при повторном открытии.

Но когда мы снова открываем книгу, ранее запущенный макрос не продолжается там, где остановился. Я хочу запустить макрос там, где он остановился, когда снова открывается. Это возможно?

Что ж, моя идея - поместить этот код при открытии книги:

     sub Auto_open()
     sheet1.activate
     ' and select the last row of the sheet1
     activesheet.paste
     end sub

потому что, когда книга открывается снова, она автоматически выполняет эту подпрограмму и копирует содержимое ячеек. Но недостатком является то, что мы не можем сказать, что его ячейки всегда будут недостаточно скопированы, потому что если пользователь копирует некоторые данные в буфер обмена, а затем открывает этот файл из-за подпрограммы Auto_open, он копирует эти данные в конец листа, но это не то, что Я хочу.

Может кто-нибудь предложить хорошую идею, чтобы преодолеть эту проблему?

1 Ответ

11 голосов
/ 17 августа 2011

Почему бы вам просто не временно .SaveAs изменить вашу рабочую книгу под другим именем файла?Затем вы можете оставить его открытым, заново открыть исходную книгу и выполнить копирование с открытыми обеими книгами.Наконец, удалите измененную книгу, если вы чувствуете, что склонны.

Этот бизнес, связанный с использованием события _Open, просто требует, чтобы произошли бедствия.

Кроме того, .Copy является чрезвычайно подверженным ошибкам методом, потому что он использует буфер обмена, которыйприложения могут получить доступ, с непредсказуемыми результатами на обоих концах.Я никогда не использую .Copy в одиночку, но иногда использую .Copy Destination:=..., что безопасно.Но в основном я делаю что-то вроде этого:

wbkTwo.Sheets("Sheet1").Range("A1:B5") = _
    wbkOne.Sheets("Sheet1").Range("A1:B5")
...