DimS
Участник

Offline
Сообщений: 10
|
Помогите! Честно работающий в Excel макрос (от planetaexcel.ru) отказался трудится в LO7. Смысл его работы: в столбце А ставится метка V (далее формулами заполняются формы, сохранение и печать ), потом следующий выбор меткой V, а предыдущая метка удаляется автоматически...
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long Dim str As String
If Target.Count > 1 Then Exit Sub If Target.Column = 1 Then str = Target.Value Application.EnableEvents = False r = Cells(Rows.Count, 2).End(xlUp).Row Range("A2:A" & r).ClearContents Target.Value = str End If Application.EnableEvents = True End Sub Понимаю, что нужно смотреть в сторону Listener и далее...
|
|
|
Записан
|
|
|
|
Bigor
|
Добрый день. Приведенный выше макрос работает в Version: 7.0.1.2 Build ID: 7cbcfc562f6eb6708b5ff7d7397325de9e764452 CPU threads: 4; OS: Linux 5.3; UI render: default; VCL: kf5 Locale: ru-RU (ru_RU.UTF-8); ИП: ru-RU Calc: threaded
|
|
|
Записан
|
|
|
|
DimS
Участник

Offline
Сообщений: 10
|
если сохранить файл XLS в формате LO тоже работает? у меня нет...
|
|
|
Записан
|
|
|
|
Bigor
|
Если сохранить в ods, то работает вот так: Option VBASupport 1 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long Dim str As String If Target.CellFormatRanges.Count > 1 Then Exit Sub If Target.CellAddress.Column = 1 Then str = Target.Value Application.EnableEvents = False r = Cells(Rows.Count, 2).End(xlUp).Row Range("A2:A" & r).ClearContents Target.Value = str End If Application.EnableEvents = True End Sub
|
|
|
Записан
|
|
|
|
DimS
Участник

Offline
Сообщений: 10
|
тёмный я! ничего не выходит...Ошибка! К какому событию макрос прилепить нужно? Да, и файл нужен не мне, а новый LO7 100% там не стоит, за этим никто не следит.
|
|
|
|
Bigor
|
Вот файл с макросом проверяйте на остальных версиях. Макрос перенес в библиотеку стандарт. Привязан к событию листа - изменение данных
|
|
|
Записан
|
|
|
|
DimS
Участник

Offline
Сообщений: 10
|
Действительно работает! Только забавный глюк нет перехода по Enter на следующую ячейку вниз в столбце A
|
|
|
Записан
|
|
|
|
ost
|
Доброго. Есть ли способ добиться от LO корректной работы строчки VBA-кода типа lSelfLastRow = oSelfSheet.Cells(Rows.Count, 10).End(xlUp).Row ? Или в #3 единственный? Подобные конструкции на VBA для формирования сводных файлов-списков из кучи отдельных файлов используются ну очень часто. =(
|
|
|
Записан
|
|
|
|
sokol92
|
"Замудренная" конструкция в #7 выдает номер строки для последней непустой строки столбца 10 книги Excel. У Диспетчера есть аналогичная команда ".uno:GoUpToStartOfData", но, разумеется, ее лучше не использовать. Можно, например, так: ' Выдает номер строки для последней непустой ячейки столбца. ' Если в столбце нет непустых ячеек, то возвращает 0. ' - column номер столбца. Function Column_lastRow(Byval oSheet, ByVal column As Long) As Long Dim oRange, oDesc, oRange2 oRange=oSheet.getCellRangeByPosition(column, 0, column, oSheet.Rows.Count-1) oDesc=oRange.createSearchDescriptor With oDesc .SearchBackwards=True .SearchWildcard=True .setSearchString "*" End With oRange2=oRange.findFirst(oDesc) If Not IsNull(oRange2) Then Column_lastRow=oRange2.CellAddress.Row End If End Function
|
|
« Последнее редактирование: 23 Январь 2021, 15:14 от sokol92 »
|
Записан
|
Владимир.
|
|
|
|
eeigor
|
Если данные представлены прямоугольным диапазоном, то бывает нужнее определить индекс последней строки, чтобы продолжить ввод (автор вопроса #7, по всей видимости, добивается того же). Dim oCursor As Object: oCursor = oSheet.createCursor() oCursor.gotoEndOfUsedArea(False)
Dim nEndRow As Long: nEndRow = oCursor.RangeAddress.EndRow Далее, зная индекс последней строки, можно выполнять свои задачи.
|
|
« Последнее редактирование: 23 Январь 2021, 16:42 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LO 7.1.1.2 Community
|
|
|
eeigor
|
Когда -то давно JohnSUN предлагал такой вариант Да, @JohnSun использует Sheet Cursor
|
|
|
Записан
|
Ubuntu 18.04 LTS • LO 7.1.1.2 Community
|
|
|
sokol92
|
Когда -то давно JohnSUN предлагал такой вариант Цитата от автора: "Не факт, что это будет именно последняя заполненная ячейка в колонке или в строке".
|
|
|
Записан
|
Владимир.
|
|
|
eeigor
|
@sokol92, естественно, оба подхода имеют своё применение. Мы же не знаем, что пользователь хранит на листе. Может, массу самостоятельных настроечных таблиц (таблиц подстановки), и в конец каждой надо перейти.
|
|
|
Записан
|
Ubuntu 18.04 LTS • LO 7.1.1.2 Community
|
|
|
Bigor
|
Еще вариант из залежей форума n= ubound(ThisComponent.getSheets().getByIndex(1).getData())
|
|
|
Записан
|
|
|
|
|