Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Июнь 2019, 12:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 5 6 7 8 »   Вниз
  Печать  
Автор Тема: Выполнить поиск на странице макросом  (Прочитано 13819 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #45: 28 Февраль 2018, 16:50 »

А вот еще интересный момент
Код:
d=InputBox("Введите статус", "Статус документа")
      If d="" Then Exit Sub
человек случайно ничего не ввел, и все - процедура прекращается, в независимости от того, что до этого она там в ячейки что-то понаписала, и скорее всего уже повторный запуск будет некорректным.

но тут то хоть сразу проверяет  и выходит, а здесь
Код:
a=InputBox("Введите номер", "Параметры поиска")
For i=1 To 6
oSheet = oDoc.Sheets(i)
If a="" Then Exit Sub
сперва ввод, потом запуск цикла, инициализация переменной и только потом смотрим, а ввели ли мы чего и, если нет, все закрываем Улыбка
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #46: 28 Февраль 2018, 17:12 »

у тебя нет 7-го листа. сделай цикл от 0 до 5
у меня 7 листов. На первом - огромная кнопища к которой привязан данный макрос.
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #47: 28 Февраль 2018, 17:13 »

что до этого она там в ячейки что-то понаписала
До этого она в ячейки ничего не писала.
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #48: 28 Февраль 2018, 17:17 »

оставь
Поправил - код ошибок не выдаёт, но и вообще ничего не делает.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #49: 28 Февраль 2018, 17:29 »

выложи правленный
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #50: 28 Февраль 2018, 17:40 »

выложи правленный
вот:
Код:
Sub Proverka_documentov
Dim desc, oFind, s, a, r, k, b, c, d
oDoc=ThisComponent
a=InputBox("Введите номер", "Параметры поиска")
If a="" Then Exit Sub
For i=1 To 6
oSheet = oDoc.Sheets(i)
desc=oSheet.createSearchDescriptor()
desc.SearchRegularExpression=false
desc.SearchString=a   'Что найти
desc.SearchWords=true      'Ячейку целиком
oFind=oSheet.findAll(desc)
If Not IsNull(oFind) Then
Exit For
Else
Print "Документ не найден"
Exit Sub
End If
s=oFind.RangeAddresses(0)
r=s.StartRow
k=s.StartColumn
If oFind.getByIndex(0).getRows().IsVisible=False then
Print "Документ не найден"
Exit Sub
End If
If oSheet.getCellByPosition (k+5, r).Value="Восстановлен" Then
Print "Документ уже восстанвлен"
Exit Sub
Else
   If oSheet.getCellByPosition (k+5, r).Value="" Then
      If MsgBox("Проверить реквизиты?", 4, "Параметры проверки")=7 Then
      d=InputBox("Введите статус", "Статус документа")
      If d="" Then Exit Sub
      oSheet.getCellByPosition (k+5, r).Value=d
      Exit Sub
      End If
   End If
End If
b=MsgBox(oSheet.getCellByPosition (k+1, r).String, 4, "Проверьте дату!")
c=MsgBox(oSheet.getCellByPosition (k+4, r).String, 4, "Проверьте сумму!")
If b=7 or c=7 Then
   If MsgBox(oSheet.getCellByPosition (k+5, r).String, 4, "Проверьте статус!")=7 Then
      If oSheet.getCellByPosition (k+5, r).Value<>"" Then
      Print "Неправильно заполнены реквизиты документа!"
      Exit Sub
      End If
   d=InputBox("Введите статус", "Статус документа")
   If d="" Then Exit Sub
   oSheet.getCellByPosition (k+5, r).Value=d
      If MsgBox ("Изменить дату?", 4, "Параметры восстановления")=7 Then
      Exit Sub
      Else
      oSheet.getCellByPosition (k+6, r).Value=Now
      End If
   Else
   Exit Sub
   End If
Else
   oSheet.getCellByPosition (k+5, r).Value="Восстановлен"
   oSheet.getCellByPosition (k+6, r).Value=Now
End If
Next i
End Sub
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #51: 28 Февраль 2018, 17:41 »

Код запускается кнопкой с первого листа и должен искать по остальным.
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #52: 28 Февраль 2018, 17:44 »

в общем у тебя почти везде чтение из ячейки через  value, сомневаюсь, что оно правильно текст возвращает, меняй на string
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #53: 1 Март 2018, 10:53 »

в общем у тебя почти везде чтение из ячейки через  value, сомневаюсь, что оно правильно текст возвращает, меняй на string
Ну ок. Но до последнего исправления, мне MsgBoxы нужное возвращали. А сейчас - вообще тишина.
 Шокирован Сейчас исправил на String - и заработало. Но ведь в первом коде для текущего листа работало и с Value. Почему же в коде для любого листа не стало работать?
« Последнее редактирование: 1 Март 2018, 11:05 от OOKapitan » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #54: 1 Март 2018, 11:41 »

Но до последнего исправления, мне MsgBoxы нужное возвращали
В msgbox у тебя везде string и стоит  Улыбка , а вот в условиях value и как они обрабатывались неизвестно
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #55: 1 Март 2018, 12:21 »

а вот в условиях value и как они обрабатывались неизвестно
Но ведь в первом коде для текущего листа работало и с Value. Почему же в коде для любого листа не стало работать?
Весь код работал, а не только MsgBox. Почему?
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #56: 1 Март 2018, 13:31 »

Появилась новая проблема - код ищет только на первом листе (по счёту исходя из интервала For). Как это исправить?
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #57: 1 Март 2018, 14:01 »

Я тебе вчера несколько раз указывал, что Exit Sub ты натыкал недумая, типа иаслом кашу не испортишь Улыбка
  
If Not IsNull(oFind) Then
Exit For
Else
Print "Документ не найден"
Exit Sub
End If

смотри свое условие, не нашел он ничего, что делать будет?
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 458


« Ответ #58: 1 Март 2018, 14:05 »

смотри свое условие, не нашел он ничего, что делать будет?
Я это уже увидел. Тогда как сделать следующее: макро ищет значение, указанное в первом InputBoxе на всех листах , указанных в цикле For, если ни на одном листе не находит - пишет "Документ не найден" и выходит из процедуры?
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 610


« Ответ #59: 1 Март 2018, 14:17 »

Первое, что в голову пришло введи переменную, допустим Flag_1 Улыбка и присвой ей True, если когда-нибудь что-нибудь найдется, то сделай ее False. А в конце процедуры условие if Flag_1 then msgbox "Ничего не нашел"
Записан
Страниц: « 1 2 3 4 5 6 7 8 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!