Пытался найти решение в других темах,но увы, либо не нашел, либо не понял......
Есть 2 макроса:
Макрос1 - борется со вставками, разрешая только вставку значений.
Макрос2 - переносит данные(определенные ячейки) из одного файла (любого) в свой файл (1.xlsm)
Так вот, во время работы Макроса2, когда он вставляет значения в "свой файл", его перехватывает Макрос1 и тут то происходит глюк...Как я понял глючит: Application.Undo: Target.PasteSpecial xlPasteValues - т.к. не может отменить действие Макроса2.
Думал отключить обработку событий, чтоб Макрос1 не срабатывал, но это вызвало другую ошибку
Вопросы:
1. Можно как то отключать Макрос1 при выполнении Макроса2 (откл. из Макроса2)
2. Может есть другой вариант Макроса1 - для вставки только значений (облазил инет ничего не нашел)
Есть 2 макроса:
Макрос1 - борется со вставками, разрешая только вставку значений.
Макрос2 - переносит данные(определенные ячейки) из одного файла (любого) в свой файл (1.xlsm)
Код |
---|
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'Макрос1 - для вставка только значений If Application.CutCopyMode Then Application.EnableEvents = 0 Application.Undo: Target.PasteSpecial xlPasteValues Application.EnableEvents = -1 End If End Sub |
Код |
---|
Sub S4itivanie() 'Макрос2 - копирование из книги Set ImaKnig1 = ThisWorkbook ImaKnig2 = Application.GetOpenFilename _ ("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы для передачи данных", , False) If VarType(ImaKnig2) = vbBoolean Then Exit Sub End If ImaKnig3 = Dir(ImaKnig2) If BookOpenClosed((ImaKnig3)) Then Workbooks(ImaKnig3).Worksheets("Спецификация").Range("A2:J23").Copy ImaKnig1.Activate Sheets("Спецификация").Range("A2").Select ActiveSheet.Paste Range("A2").Select Application.CutCopyMode = False Else Workbooks.Open (ImaKnig2) Workbooks(ImaKnig3).Worksheets("Спецификация").Range("A2:J23").Copy ImaKnig1.Activate Sheets("Спецификация").Range("A2").Select ActiveSheet.Paste Range("A2").Select Application.CutCopyMode = False Workbooks(ImaKnig3).Close (False) End If End Sub 'функция, предназначенная для проверки, открыта или закрыта рабочая книга. Function BookOpenClosed(wbName As String) As Boolean Dim myBook As Workbook On Error Resume Next Set myBook = Workbooks(wbName) BookOpenClosed = Not myBook Is Nothing End Function |
Так вот, во время работы Макроса2, когда он вставляет значения в "свой файл", его перехватывает Макрос1 и тут то происходит глюк...Как я понял глючит: Application.Undo: Target.PasteSpecial xlPasteValues - т.к. не может отменить действие Макроса2.
Думал отключить обработку событий, чтоб Макрос1 не срабатывал, но это вызвало другую ошибку
Код |
---|
Application.EnableEvents = False ActiveSheet.Paste Application.EnableEvents = True |
Вопросы:
1. Можно как то отключать Макрос1 при выполнении Макроса2 (откл. из Макроса2)
2. Может есть другой вариант Макроса1 - для вставки только значений (облазил инет ничего не нашел)