Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2017, 12:16   #31
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Aristarkch Посмотреть сообщение
При выделении ЛК ячейки первого листа (ниже 19 строки), например, AC22 выделяются ячейки A13 и A17 первого столбца
Смотрю ваш файл. Выделяются А6 и А10. На втором листе (задан столбец 1), также выделяются А6 и А10.
Цитата:
Сообщение от AlexM12 Посмотреть сообщение
Чтобы лучше понимать друг друга надо использовать терминологию программы. Описывать ячейки по их адресам.
Не надо что-то абстрактное, так как при выборе AC22 не выделяются ячейки A13 и A17 и на листе нет таких значений "A13" и "A17"
Пока учимся понимать друг друга.
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 24.03.2017, 12:39   #32
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim sm, i As Long, sm1 As Long, sm2 As Long
    Dim SheetIndex As Long, ColumnIndex As Long
    Set IRange = Range("A1:AN18") 'задаем верхний диапазон
    Set JRange = Range("B20:AN37") 'задаем нижний диапазон
    SheetIndex = 2: ColumnIndex = 1 'тут задаем индекс листа и столбец для единиц
    IRange.Interior.ColorIndex = 0
    Sheets(SheetIndex).Cells.Clear ' если закомментировать эту строку, то на 2 и далее листах метки не стираются
    If Not Intersect(JRange, Target) Is Nothing Then
        On Error Resume Next
        sm = Split(Replace(Target.Formula, "*", ":"), ":")
        sm0 = Range(sm(1)).Column - Target.Column
        sm1 = Range(sm(2)).Column - Target.Column
        sm2 = Range(sm(4)).Column - Target.Column
        If Err Then Exit Sub
        For i = 1 To IRange.Rows.Count
            If Cells(i, Target.Column + sm0) = 1 And Cells(i, Target.Column + sm1) = 1 _
                And Cells(i, Target.Column + sm2) = 1 Then
                Cells(i, Target.Column + sm0).Interior.ColorIndex = 4
                Cells(i, Target.Column + sm1).Interior.ColorIndex = 4
                Cells(i, Target.Column + sm2).Interior.ColorIndex = 4
                Cells(i, 1).Interior.ColorIndex = 4
                
                Sheets(SheetIndex).Cells(i, ColumnIndex) = 1
                Sheets(SheetIndex).Cells(i, ColumnIndex).Interior.ColorIndex = 4
            End If
        Next i
    End If
End Sub
Не сильно затягивайте с ответами. За 5 дней вашего молчания решался не один десяток задач. Может настать момент, когда возвращаться к давней задаче не захочется.
Вложения
Тип файла: xls Последний вариант_01.xls (58.5 Кб, 10 просмотров)
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 24.03.2017, 13:01   #33
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Аристарх,
а на какие Ваши действия макрос в последнем, выложенном мною файле, реагирует несуразно)) и в чем это выражается?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.03.2017, 13:52   #34
Aristarkch
Пользователь
 
Регистрация: 06.03.2017
Сообщений: 38
По умолчанию Выделение строк

Цитата:
Сообщение от AlexM12 Посмотреть сообщение
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim sm, i As Long, sm1 As Long, sm2 As Long
    Dim SheetIndex As Long, ColumnIndex As Long
    Set IRange = Range("A1:AN18") 'задаем верхний диапазон
    Set JRange = Range("B20:AN37") 'задаем нижний диапазон
    SheetIndex = 2: ColumnIndex = 1 'тут задаем индекс листа и столбец для единиц
    IRange.Interior.ColorIndex = 0
    Sheets(SheetIndex).Cells.Clear ' если закомментировать эту строку, то на 2 и далее листах метки не стираются
    If Not Intersect(JRange, Target) Is Nothing Then
        On Error Resume Next
        sm = Split(Replace(Target.Formula, "*", ":"), ":")
        sm0 = Range(sm(1)).Column - Target.Column
        sm1 = Range(sm(2)).Column - Target.Column
        sm2 = Range(sm(4)).Column - Target.Column
        If Err Then Exit Sub
        For i = 1 To IRange.Rows.Count
            If Cells(i, Target.Column + sm0) = 1 And Cells(i, Target.Column + sm1) = 1 _
                And Cells(i, Target.Column + sm2) = 1 Then
                Cells(i, Target.Column + sm0).Interior.ColorIndex = 4
                Cells(i, Target.Column + sm1).Interior.ColorIndex = 4
                Cells(i, Target.Column + sm2).Interior.ColorIndex = 4
                Cells(i, 1).Interior.ColorIndex = 4
                
                Sheets(SheetIndex).Cells(i, ColumnIndex) = 1
                Sheets(SheetIndex).Cells(i, ColumnIndex).Interior.ColorIndex = 4
            End If
        Next i
    End If
End Sub
Не сильно затягивайте с ответами. За 5 дней вашего молчания решался не один десяток задач. Может настать момент, когда возвращаться к давней задаче не захочется.
Алексей, извините! Исправил текст.
При выделении ЛК ячейки первого листа (ниже 19 строки), например, AC22 выделяются ячейки первого столбца A6 и A10, в которых, соответственно, записаны числа 13 и 17. При этом во второй лист записываются с заливкой единицы в 13 и в 17 строки столбца (номер столбца задается в макросе).

Общее правило: в заданном столбце второго листа выделяются ячейки в строках, соответствующих числам из выделенных ячеек первого столбца первого листа.

Это всё в файле есть.

Проблема же в том, что в представленном файле при записи в заданный столбец второго листа стирается содержимое всех остальных столбцов второго листа.
Необходимо сделать так, чтобы при записи в заданный столбец второго листа не затрагивалось содержимое ячеек остальных столбцов этого листа.

В крайнем случае допустимо, чтобы во втором листе, как и в первом, просто выделялись бы заливкой (без записи единиц) ячейки также первого столбца A: A13 и A17 в нашем примере. Содержимое ячеек остальных столбцов не затрагивается.

Вторая задача - возможность изменения (задания) размеров верхнего и нижнего полей файла. Сейчас в макросе выставлены размер верхнего поля "A1:AN18" и размер нижнего поля "B20:AN37".
Для конкретики: размер верхнего поля может быть "A1:CM36", а размер нижнего "B39:CM127".
Вложения
Тип файла: xls Последний вариант.xls (79.5 Кб, 13 просмотров)

Последний раз редактировалось Aristarkch; 24.03.2017 в 14:01.
Aristarkch вне форума Ответить с цитированием
Старый 24.03.2017, 14:30   #35
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Проверяйте
Вложения
Тип файла: xls Последний вариант_02.xls (57.0 Кб, 17 просмотров)
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 24.03.2017, 17:36   #36
Aristarkch
Пользователь
 
Регистрация: 06.03.2017
Сообщений: 38
По умолчанию

Цитата:
Сообщение от AlexM12 Посмотреть сообщение
Проверяйте
Здорово!
Обнаружил такую деталь.
Форматирую ячейки второго листа, как мне надо: по вертикали. по горизонтали, автоподбор ширины, шрифт.
Когда же во второй лист происходит очередная запись, форматирование ячеек скатывается на изначально установленное, что было до форматирования.
Aristarkch вне форума Ответить с цитированием
Старый 24.03.2017, 18:13   #37
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

В файле Последний вариант_02.xls строка кода 'Sheets(SheetIndex).Cells.Clear закомментирована. В этом случае очистку форматов не наблюдаю. Если не комментировать эту строку, то форматы очищаются.
Алексей М.

Последний раз редактировалось AlexM12; 24.03.2017 в 18:15.
AlexM12 вне форума Ответить с цитированием
Старый 24.03.2017, 18:46   #38
Aristarkch
Пользователь
 
Регистрация: 06.03.2017
Сообщений: 38
По умолчанию

Если строка закомментирована, то,действительно, формат не меняется, но зато метки (заливки) при каждом выделении не убираются, а накапливаются, что неприемлемо. При незакомментированной строке наоборот.
Как бы сделать так, чтобы при каждом последующем выделении и метки предыдущие стирались и формат не менялся?
Aristarkch вне форума Ответить с цитированием
Старый 24.03.2017, 19:33   #39
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Посмотрите. Формат на Лист 2 установил.
Вложения
Тип файла: xls Последний вариант_03.xls (59.5 Кб, 13 просмотров)
Алексей М.
AlexM12 вне форума Ответить с цитированием
Старый 24.03.2017, 20:23   #40
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у нас, на курсах трактористов, был аналогичный случай
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение строк Aristarkch Microsoft Office Excel 12 07.03.2017 17:09
Выделение позиций(строк) PayPinki C++ Builder 1 31.01.2013 10:11
Выделение строк в Мемо Zuba C++ Builder 1 28.04.2012 13:11
выделение строк ruavia3 Microsoft Office Excel 2 26.08.2009 13:36
Выделение строк с... по - в SynEdit Noor Общие вопросы Delphi 2 29.12.2007 12:41