Страницы: 1
RSS
Не работает буфер обмена между файлами
 
Добрый вечер. Господа, подскажите в чем может быть проблема: после установки надстройки отказывается корректно работать буфер обмена. Если что-то скопировать в одном файле, в другой уже не вставить и кнопки вставки неактивны. Содержимое буфера пустое (даже если вернуться в прежний файл и ставить там).

В надстройке есть событие вида Windows.Activate, по которому в новых книгах ищется определенный заголовок столбца и на основании этого ему устанавливается числовой формат. Подозреваю что как раз это и сбрасывает буфер. Как можно обойти проблему? Событие вида Workbook.Open отказывается обрабатывать код по поиску столбца и установке формата.
Код
Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
    ColumnName = "acc_n": On Error Resume Next: Err.Clear
    Range("1:1").Find(ColumnName).EntireColumn.NumberFormat = "0"
End Sub
 
Djinn, Window.Activate - это метод объекта Window, а не событие:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/window-activate-method-excel
У события Object_Activate() другой синтаксис заголовка и, насколько понимаю, цели использования обратные Вашим(после подчёркивания в триггерах идёт ключевое слово условия их выполнения, т.е. _Activate - это реакция на каждую активацию объекта). Т.е. у Вас тут обычная процедура, а не триггер vba.
Копирования чего-то в буфер в этом коде нет. Потому и пустой :)?
Вообще, что Вы хотели сделать? Перебрать коллекцию Windows или чтобы событие выполнялось каждый раз по активации файла Excel?
Изменено: Irregular Expression - 23.01.2018 08:03:14
 
Может быть всё дело в том, что файлы открываются в разных экземплярах Excel?
 
Подсказка. Скопировать что-либо, и выполнить макрос
Код
Sub test()
    MsgBox "CutCopyMode до " & Application.CutCopyMode
    Windows("Книга1").Activate
    Sheets(1).[a1].NumberFormat = "0"
    MsgBox "CutCopyMode после " & Application.CutCopyMode
End Sub

Цитата
Djinn написал:
Событие вида Workbook.Open отказывается
Сказка.
А для вызова по этому событию кода из надстройки, использовать
Код
App_Workbook.Open
 
Цитата
Djinn написал:
Подозреваю что как раз это и сбрасывает буфер
Да, это так.
Цитата
Djinn написал:
Событие вида Workbook.Open отказывается обрабатывать код по поиску столбца и установке формата
У меня работает - закомментируйте указанный код и добавьте
Код
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
Const COLUMN_NAME = "acc_n"
Dim w As Worksheet
  On Error Resume Next
  For Each w In Wb.Worksheets
    w.Range("1:1").Find(COLUMN_NAME, , xlValues, xlWhole, , , False).EntireColumn.NumberFormat = "0"
  Next
End Sub
Страницы: 1
Читают тему
Наверх