Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
OpenOffice/LibreOffice

Условное форматирование на всех станицах книги (макрос)

16.09.2019, 18:10. Показов 7369. Ответов 37

Студворк — интернет-сервис помощи студентам
Всем привет , можете помочь написать макрос на условное форматирование всех страницах книги.
Оставляю пример как нужно , заранее спасибо !
Вложения
Тип файла: zip пример как должно быть.zip (8.4 Кб, 10 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2019, 18:10
Ответы с готовыми решениями:

Макрос переноса всех данных из одной рабочей книги в другую
Подскажите макрос для переноса всех данных из одной рабочей книги в другую Или какой-нибудь другой способ как это можно сделать

макрос для обьединения таблиц со всех листов одной книги в одну
как обьединить таблицы или все листы в одной книге в один лист

Условное форматирование
Добрый день господа! Прошу Вас оказать помощь. Как при помощи условного форматирования (при вводе данных), необходимо что бы...

37
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.09.2019, 09:27
Студворк — интернет-сервис помощи студентам
Если бы я получил ошибку, то не стал бы публиковать код.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
19.09.2019, 10:11  [ТС]
логично )
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.09.2019, 10:20
Лучший ответ Сообщение было отмечено georgiy123 как решение

Решение

Но ошибка там всё таки есть, в строке#10 разделитель должен быть . а не , и первое условие >0.95 а не >0.9

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
private sub main
    dim p$, f$, t$, rw&, cl&, a(), i&
    dim wb as object, ws as object, c as object
    
    p="C:\Users\Gowan MTB\Desktop\EAR logs\"
    f=dir(p+"*.txt")
    if len(f) then wb=thiscomponent else exit sub
    
    do           
       wb.sheets.insertnewbyname(f,i)
       ws=wb.sheets(i):i=i+1:rw=0
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c=ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl)) 
                   end select
               next
               rw=rw+1
            loop
       close #1
       setFormat ws, rw
       f=dir
    loop while len(f) 
end sub
 
sub setFormat(ws as object, rw&)
    dim r as object, cf as object 
 
    r=ws.getcellrangebyname("f1:f"+rw)
    cf=r.conditionalformat   
    
    condFormat "0.95", "" , "Good", 3, cf
    condFormat "0.9", "0.95", "Neutral", 7, cf
    condFormat "0.85", "0.8999", "Bad", 7, cf
    condFormat "0", "0.85", "Error", 7, cf
    
    r.conditionalformat=cf
End Sub
 
sub condFormat(formula1$, formula2$, style$, o&, cf as object)
    dim p(3) As new com.sun.star.beans.PropertyValue
    p(0).name="StyleName"
    p(0).value=style
    p(1).name="Operator"
    p(1).value=o
    p(2).name="Formula1"
    p(2).value=formula1
    if len(formula2) then
       p(3).name="Formula2"
       p(3).value=formula2
    end if       
    cf.addnew(p)
end sub
1
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
19.09.2019, 12:45  [ТС]
Павел , именно то что надо , спасибо вам большое!!!)))

Будете в Ташкенте , дайте знать, с меня плов !
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.09.2019, 15:00
В строке#28 имеет смысл написать так, иначе даже если текстовый файл будет пустой, то всё равно будет вызываться процедура для установки у.ф.

Visual Basic
1
if rw then setFormat ws, rw
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
19.09.2019, 19:35  [ТС]
хорошо , спасибо огромное вам !!!))
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
02.04.2020, 12:37  [ТС]
Павел , добрый день !.
Я немного изменил ваш код . , он работал , все было прекрасно !
Но , у меня изменились входящие тхт файлы.
Теперь в первом столбце слова вместо цифр, и они отображаются как нули .
На другом форуме подсказали.
c.setvalue(a(cl))
заменить на
c.setstring(a(cl))
После замены начали отоброжаться слова (как мне и надо ) , но пропало условное форматирование но макрос не на что не ругается .
Можете помочь решить эту проблему ?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
private sub main
    dim p$, f$, t$, rw&, cl&, a(), i&
    dim wb as object, ws as object, c as object
    
    p="C:\Users\g.nerovniy\Desktop\log\"
    f=dir(p+"*.txt")
    if len(f) then wb=thiscomponent else exit sub
    
    do           
       wb.sheets.insertnewbyname(f,i)
       ws=wb.sheets(i):i=i+1:rw=0
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   c=ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                       case else
                          c.setstring(a(cl)) 
                   end select
               next
               rw=rw+1
            loop
       close #1
       setFormat ws, rw
       f=dir
    loop while len(f) 
    oDoc = ThisComponent
 
oDoc.Sheets.removeByName("Лист1")
end sub
 
sub setFormat(ws as object, rw&)
    dim r as object, cf as object 
 
    r=ws.getcellrangebyname("f1:f"+rw)
    cf=r.conditionalformat   
    
    condFormat "0.95", "" , "Good", 3, cf
    condFormat "0.9", "0.95", "Neutral", 7, cf
    condFormat "0.85", "0.8999", "Bad", 7, cf
    condFormat "0", "0.85", "Error", 7, cf
    
    r.conditionalformat=cf
    
End Sub
 
sub condFormat(formula1$, formula2$, style$, o&, cf as object)
    dim p(3) As new com.sun.star.beans.PropertyValue
    p(0).name="StyleName"
    p(0).value=style
    p(1).name="Operator"
    p(1).value=o
    p(2).name="Formula1"
    p(2).value=formula1
    if len(formula2) then
       p(3).name="Formula2"
       p(3).value=formula2
    end if       
    cf.addnew(p)
 
 
end sub
 
 
sub delsave
 odoc=thiscomponent
 oSheet = oDoc.CurrentController.getActiveSheet()
 myrows=oSheet.getrows
 
 rowmax=3000
 rowmin=0
 
 For i=rowmax To rowmin step -1
 textnd = osheet.getcellbyposition(5,i).string
    If textnd >="0,95" Then
      myrows.removebyindex(i,1)
    End if   
 Next i
Dim args(0) As New com.sun.star.beans.PropertyValue
oDoc.storeToURL("file:///C:/Users/g.nerovniy/Desktop/mis.ods", args())
oDoc.close(true) 
end sub
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.04.2020, 13:14
Не видел чужой подсказки, но по синтаксису всё верно, а по сути фигня, потому, что у меня в зависимости от номера столбца используется либо setvalue, либо setstring. Значит, при изменении номера столбца - нужно просто менять его номер в select case.
И, разумеется, в столбце F:F должны быть числа.


Цитата Сообщение от georgiy123 Посмотреть сообщение
Я немного изменил ваш код
вижу какую хрень типа oDoc = ThisComponent, зачем, если wb это и есть книга (см. строка#7)

P.S. А если не поможет, то, как всегда, нужен текстовый файл(фрагмент без конфиденциальных данных) и результат импорта данных, вкупе с у.ф. в виде электронной таблицы.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
02.04.2020, 14:47  [ТС]
Спасибо большое что подсказали ! , нашел решение.
Изменил
Visual Basic
1
case 0 to 2, 5 to 7
на

Visual Basic
1
2
 
case 1 to 2, 5 to 7
и всё заработало !
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
02.04.2020, 22:42
georgiy123, Не нравится мне и delsave

1) Перебор фиксированного количества строк. Понятно, что макс. количество взято с запасом, но это не есть гуд.
2) Идёт обработка столбца с числами, при этом числа, зачем-то, конвертируются в текст.
3) Обрабатывается только активный лист, хотя при импорте, для каждого текстового файла создаётся свой лист.
4) И главное, вообще непонятно, зачем удалять строки, где в столбце F значение >=0.95 если при импорте можно просто пропускать такие строки
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
07.04.2020, 10:38  [ТС]
При помощи питона я объединяю 68 тхт файлов , общее количество строк каждый день разное . (~2500 строк)

1) Взял с форума скрипт , подстроил под себя , работает гуд .
2) При помощи питона "словарь" переводит полностью первый столбец , 1 == один , 2==два и т.п.
3) Я не трогал ваш макрос , после объедении всех тхт файлов , остается только один .
4) "А что так можно было ?" ну а если серьёзно , я не знал.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
07.04.2020, 11:45
Цитата Сообщение от georgiy123 Посмотреть сообщение
При помощи питона я объединяю 68 тхт файлов
Вот здесь Вы говорили, что один текстовый файл = лист, если условия изменились, то нет смысла мучить змею, можете использовать этот же макрос, только не создавать для каждого файла свой лист, а импортировать все данные в первый лист.

1) Не всё, что работает - есть гуд. Раковые клетки тоже выполняют свои функции.
2) Зачем опять питон, "выделите" этот столбец в select case и меняйте там, что хотите
3) Макрос был написан для импорта всех текстовых файлов, если правила опять изменились, то, повторюсь, либо нет смысла предварительно об'единять все .txt файлы, либо нет смысла в переборе .txt в макросе
4) Можно. Между строками# 15 и 16 добавьте условие, где будет проверяться значение элемента массив a(5)


P.S. А вот и первоначальная версия макроса, где все текстовые файлы из указанной папки - импортируются в первый лист, причём, без всякой змеи.
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
08.04.2020, 15:42  [ТС]
Я вас понял что вы хотите донести , это быстрее и лучше.
Но я писал всё на питоне , скриптом , ибо я его по чуть чуть изучаю .
Думаю до VB мне еще далековато ):
Я понял что
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
private sub main
    dim p$, f$, t$, rw&, cl&, a()
    dim wb as object, ws as object, c as object
    dim args(0) As New com.sun.star.beans.PropertyValue
    
    p="C:\Users\g.nerovniy\Desktop\log\"
    f=dir(p+"*.txt"): if len(f)=0 then exit sub
    
    wb=thiscomponent: ws=wb.sheets(0)
    
    do
       open p+f for input as #1
            do while not eof(#1)
               line input #1, t
               a=split(t)
               for cl=0 to ubound(a)
                   'если в столбце а(5) значение <= 0,95
                        'пропускать эту строку 
                   c= ws.getcellbyposition(cl,rw)
                   select case cl
                       case 0 to 2, 5 to 7
                          c.setvalue(a(cl))
                         'c.изменить столбец 0
                            'если значение равно 1 == один:
                            'если значение равно 2== два:
                                'и так далее 
                       case else
                          c.setstring(a(cl)) 
                   end select
               next
               rw=rw+1
            loop
       close #1
       f=dir
    loop while len(f)
 
odoc=thiscomponent
oSheet = oDoc.CurrentController.getActiveSheet()
myrows=oSheet.getrows    
 
oDoc.storeToURL("file:///C:/Users/g.nerovniy/Desktop/mis.ods", args())
oDoc.close(true) 
end sub
только както так , если поможете (приведёте пример ) я постараюсь его подогнать под себя.
А на питоне у меня всё работает отлично.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
08.04.2020, 16:52
Цитата Сообщение от georgiy123 Посмотреть сообщение
'и так далее
приведите пример на питоне, как Вы меняете значения первого(0) столбца и сколько там вообще этих чисел. пока это просто сумма прописью
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
08.04.2020, 22:28  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import re
def multiwordReplace(text, wordDic):
    
    rc = re.compile('|'.join(map(re.escape, wordDic)))
    def translate(match):
        return wordDic[match.group(0)]
    return rc.sub(translate, text)
 
fileint = open('C:/Users/georgiy/Desktop/log/вывод.txt','r')
str1=fileint.read()
 
wordDic = {
'11': 'одиннадцать',
'12': 'двенадцать',
'13': 'тринадцать',
#и так далее до 68 
}
 
str2 = multiwordReplace(str1, wordDic)
 
 
fileout =  open('C:/Users/georgiy/Desktop/log/вывод.txt','w')
t1=fileout.writelines(str2)
fileout.close()
Сумма прописью для примера , на самом деле там другое .
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
08.04.2020, 22:54
Там другое, и здесь другое, переписал на VBA

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Private Sub Test()
    Dim p$, f$, t$, cl&, a, rw2&, rw3&: rw3 = 1
    Dim wb As Workbook, ws As Worksheet ', r As Range = True
 
    p = "C:\Users\georgiy\Desktop\"
    f = Dir$(p + "*.txt"): If Len(f) = 0 Then Exit Sub
    
    Application.ScreenUpdating = False
    Set wb = ActiveWorkbook 'ThisWorkbook
    Set ws = wb.Worksheets(1): ws.Cells.Delete
    Do
         Open p + f For Input As #1
              t = Input(LOF(1), #1)
              a = Split(t, vbLf)
              cl = UBound(Split(a(0)))
              a = ArrToCell(a, UBound(a), rw2, cl)
         Close #1
         If rw2 Then
            ws.Cells(rw3, 1).Resize(rw2, 8) = a
            rw3 = rw3 + rw2 - 1: rw2 = 0
         End If
         f = Dir$
    Loop While Len(f)
    
    If rw3 > 1 Then setFormat ws.Range("F1:F" + CStr(rw3))
    
    Application.DisplayAlerts = False
    wb.SaveAs p + "mis.xls": wb.Close True
    Application.ScreenUpdating = True
End Sub
 
Private Function ArrToCell(a, rw1&, rw2&, cl&)
    ReDim a1(rw1, cl): Dim t$, up#, a2
    For rw1 = 0 To rw1
        t = Trim$(a(rw1))
        If Len(t) Then
           a2 = Split(t)
           up = Val(a2(5))
           If up <= 0.95 Then
              For cl = 0 To UBound(a2)
                  Select Case cl
                     Case 1, 2, 5 To 7
                      a1(rw2, cl) = Val(a2(cl))
                     Case 0
                      a1(rw2, 0) = NumToText(Val(a2(0)))
                     Case Else
                      a1(rw2, cl) = a2(cl)
                  End Select
              Next
              rw2 = rw2 + 1
           End If
        End If
    Next
    ArrToCell = a1
End Function
 
Private Function NumToText$(i&)
    Select Case i
        Case 1 To 10: NumToText = Choose(i, _
        "Один", "Два", "Три", "Четыре", "Пять", "Шесть", "Семь", "Восемь", "Девять", "Десять")
    End Select
End Function
 
Private Sub setFormat(r As Range)
    Dim cf As FormatConditions
    Set cf = r.FormatConditions
    
    With cf.Add(xlCellValue, xlBetween, 0, 0.855)
         .Interior.Color = 255:   .StopIfTrue = True
    End With
    With cf.Add(xlCellValue, xlBetween, 0.855, 0.8999)
         .Interior.Color = 49407: .StopIfTrue = True
    End With
    With cf.Add(xlCellValue, xlBetween, 0.9, 0.95)
         .Interior.Color = 65535: .StopIfTrue = True
    End With
End Sub
0
0 / 0 / 0
Регистрация: 10.09.2019
Сообщений: 48
09.04.2020, 18:22  [ТС]
Ругается на 3 строку на Workbook и на Worksheet
Миниатюры
Условное форматирование на всех станицах книги (макрос)   Условное форматирование на всех станицах книги (макрос)  
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
09.04.2020, 18:29
Это макрос для Excel А Вам его нужно переписать под LibreOffice.

Правда злые языки утверждают, что VBA макросы можно выполнять и в Calc, но у меня не прокатывает (даже пример из faq, разумеется, с указанием реального листа)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2020, 18:29

Условное форматирование
Помогите решить задачку.... при условном форматировании необходимо, чтобы активная ячейка находилась вверху колонки, то есть А1 или В1 или...

Условное форматирование
Ребят, такой вопрос: есть ячейка, в которой есть условное форматирование на ввод чисел от 1 до 10. Если пользователь вводит число от...

Условное форматирование.
Ребята, подскажите. Есть в Excel такая возможность - применить к определённому диапазону условное форматирование. Т. е., например, если в...

Условное форматирование
Ребятки, помогите, пож, переделать макрос на условное форматирование Sub Column_G_Fill_if() Set Rng =...

Условное форматирование ячеек
Ребята, подскажите. Есть в Excel такая возможность - применить к определённому диапазону условное форматирование. Т. е., например, если в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru