Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Размещение рисунков на листе в соответствии с числом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Размещение рисунков на листе в соответствии с числом
ВасилисаЛукьянчикова Дата: Четверг, 22.11.2018, 20:47 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Форумчане, помогите решить вопрос.

Макрос размещает на листе рисунки.
Макрос в плане порядка отображения этих размещаемых объектов - действует так : какой прямоугольник первым размещен - тот стоит позади всех, а тот который последним размещен - тот впереди всех.

Как разместить объекты - в соответствии с индексом отображения (записанным в строке "8") ?

В начале строки 8 - есть ячейка с числом.
Чем выше число - тем выше порядок ее отображения.
Допустим в строке 8 - есть три ячейки с индексами 0,1,2.
Впереди всех - будут стоять фигуры из строки с индексом 2. Ниже них - фигуры из строки с индексом 1. Ну и нулевые а затем и отрицательные значения (типа "-5") - самые последние в порядке отображения.
К сообщению приложен файл: 3886735.xls (44.0 Kb)
 
Ответить
СообщениеФорумчане, помогите решить вопрос.

Макрос размещает на листе рисунки.
Макрос в плане порядка отображения этих размещаемых объектов - действует так : какой прямоугольник первым размещен - тот стоит позади всех, а тот который последним размещен - тот впереди всех.

Как разместить объекты - в соответствии с индексом отображения (записанным в строке "8") ?

В начале строки 8 - есть ячейка с числом.
Чем выше число - тем выше порядок ее отображения.
Допустим в строке 8 - есть три ячейки с индексами 0,1,2.
Впереди всех - будут стоять фигуры из строки с индексом 2. Ниже них - фигуры из строки с индексом 1. Ну и нулевые а затем и отрицательные значения (типа "-5") - самые последние в порядке отображения.

Автор - ВасилисаЛукьянчикова
Дата добавления - 22.11.2018 в 20:47
Roman777 Дата: Четверг, 22.11.2018, 22:10 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ВасилисаЛукьянчикова, Добавьте сортировку, и всё будет ок.
[vba]
Код
Sub Макрос1()

Dim lastcol&
Dim Shps()
Dim sp As Shape

    lastcol = Cells(2, Columns.Count).End(xlToLeft).Column
    ReDim Shps(1 To lastcol - 1)
    For i = 1 To lastcol - 1
        Set Shps(i) = Cells(1, i + 1).Resize(8)
    Next i
    Call sort1(Shps)
    For i = 1 To lastcol - 1
        Set sp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Shps(i)(2, 1), Shps(i)(3, 1), Shps(i)(5, 1), Shps(i)(6, 1))
        With sp.Fill
            .Visible = msoTrue
            .ForeColor.RGB = Shps(i)(7, 1).Interior.Color
            .Transparency = 0
        End With
        
    Next i
End Sub
Function sort1(Arr1 As Variant) As Variant
    Dim tmp
    For i = 1 To UBound(Arr1)
        For j = 1 To UBound(Arr1) - 1
            If (Arr1(j)(8, 1) > Arr1(j + 1)(8, 1)) Then
                tmp = Arr1(j)(8, 1)
                Arr1(j)(8, 1) = Arr1(j + 1)(8, 1)
                Arr1(j + 1)(8, 1) = tmp
            End If
        Next j
    Next i
    sort1 = Arr1
End Function
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеВасилисаЛукьянчикова, Добавьте сортировку, и всё будет ок.
[vba]
Код
Sub Макрос1()

Dim lastcol&
Dim Shps()
Dim sp As Shape

    lastcol = Cells(2, Columns.Count).End(xlToLeft).Column
    ReDim Shps(1 To lastcol - 1)
    For i = 1 To lastcol - 1
        Set Shps(i) = Cells(1, i + 1).Resize(8)
    Next i
    Call sort1(Shps)
    For i = 1 To lastcol - 1
        Set sp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, Shps(i)(2, 1), Shps(i)(3, 1), Shps(i)(5, 1), Shps(i)(6, 1))
        With sp.Fill
            .Visible = msoTrue
            .ForeColor.RGB = Shps(i)(7, 1).Interior.Color
            .Transparency = 0
        End With
        
    Next i
End Sub
Function sort1(Arr1 As Variant) As Variant
    Dim tmp
    For i = 1 To UBound(Arr1)
        For j = 1 To UBound(Arr1) - 1
            If (Arr1(j)(8, 1) > Arr1(j + 1)(8, 1)) Then
                tmp = Arr1(j)(8, 1)
                Arr1(j)(8, 1) = Arr1(j + 1)(8, 1)
                Arr1(j + 1)(8, 1) = tmp
            End If
        Next j
    Next i
    sort1 = Arr1
End Function
[/vba]

Автор - Roman777
Дата добавления - 22.11.2018 в 22:10
ВасилисаЛукьянчикова Дата: Четверг, 22.11.2018, 22:37 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Roman777, нет - на листе - ничего сортировать не надо.
Поскольку данные в ячейках - обновляются из других источников.
Если вы их отсортируете - значит данные будут обновляться - не в тех ячейках.

Речь идет о том, чтобы назначить объектам уровень видимости - в соответствии с индексом отображения (записанным в строке "8").
 
Ответить
СообщениеRoman777, нет - на листе - ничего сортировать не надо.
Поскольку данные в ячейках - обновляются из других источников.
Если вы их отсортируете - значит данные будут обновляться - не в тех ячейках.

Речь идет о том, чтобы назначить объектам уровень видимости - в соответствии с индексом отображения (записанным в строке "8").

Автор - ВасилисаЛукьянчикова
Дата добавления - 22.11.2018 в 22:37
Roman777 Дата: Пятница, 23.11.2018, 08:10 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ВасилисаЛукьянчикова, На листе ничего и не сортируется. Ваши данные для создание шейпов записываются в массив, в котором они сортируются по значению в 8й строке и уже по порядку из этого массива рисуются... Так и получается уровень перекрытия одного объекта другим.


Много чего не знаю!!!!
 
Ответить
СообщениеВасилисаЛукьянчикова, На листе ничего и не сортируется. Ваши данные для создание шейпов записываются в массив, в котором они сортируются по значению в 8й строке и уже по порядку из этого массива рисуются... Так и получается уровень перекрытия одного объекта другим.

Автор - Roman777
Дата добавления - 23.11.2018 в 08:10
ВасилисаЛукьянчикова Дата: Пятница, 23.11.2018, 08:35 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
в котором они сортируются по значению в 8й строке и уже по порядку из этого массива рисуются


Так смысл-то тогда какой у этой сортировки, если индекс отображения присваивается в итоге - не тем фигурам ?

Вот я присваиваю для столбца C (который рисует красный прямоугольник) - индекс "20".
То есть самый большой из всех.
По идее данный прямоугольник - должен быть поверх всех прочих фигур.

Но ваш код в результате сортировки - смещает этот индекс - куда-то в конец восьмой строки.
А столбцу C - макрос таким образом самостоятельно присваивает индекс "6".

И этот прямоугольник, который вроде бы должен отображаться поверх всех остальных - после этой сортировки отображается на заднем плане.
К сообщению приложен файл: 1172634.xls (46.0 Kb)
 
Ответить
Сообщение
в котором они сортируются по значению в 8й строке и уже по порядку из этого массива рисуются


Так смысл-то тогда какой у этой сортировки, если индекс отображения присваивается в итоге - не тем фигурам ?

Вот я присваиваю для столбца C (который рисует красный прямоугольник) - индекс "20".
То есть самый большой из всех.
По идее данный прямоугольник - должен быть поверх всех прочих фигур.

Но ваш код в результате сортировки - смещает этот индекс - куда-то в конец восьмой строки.
А столбцу C - макрос таким образом самостоятельно присваивает индекс "6".

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

Автор - ВасилисаЛукьянчикова
Дата добавления - 23.11.2018 в 08:35
Roman777 Дата: Пятница, 23.11.2018, 09:43 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ВасилисаЛукьянчикова, вот теперь вижу, действительно я лапухнулся с функцией...). Замените её на эту:
[vba]
Код
Function sort1(Arr1 As Variant)
    Dim tmp
    For i = 1 To UBound(Arr1)
        For j = 1 To UBound(Arr1) - 1
            If (Arr1(j)(8, 1) > Arr1(j + 1)(8, 1)) Then
                Set tmp = Arr1(j)
                Set Arr1(j) = Arr1(j + 1)
                Set Arr1(j + 1) = tmp
            End If
        Next j
    Next i
    sort1 = Arr1
End Function
[/vba]
[p.s.] спать бежал...[/p.s.]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 23.11.2018, 09:45
 
Ответить
СообщениеВасилисаЛукьянчикова, вот теперь вижу, действительно я лапухнулся с функцией...). Замените её на эту:
[vba]
Код
Function sort1(Arr1 As Variant)
    Dim tmp
    For i = 1 To UBound(Arr1)
        For j = 1 To UBound(Arr1) - 1
            If (Arr1(j)(8, 1) > Arr1(j + 1)(8, 1)) Then
                Set tmp = Arr1(j)
                Set Arr1(j) = Arr1(j + 1)
                Set Arr1(j + 1) = tmp
            End If
        Next j
    Next i
    sort1 = Arr1
End Function
[/vba]
[p.s.] спать бежал...[/p.s.]

Автор - Roman777
Дата добавления - 23.11.2018 в 09:43
ВасилисаЛукьянчикова Дата: Пятница, 23.11.2018, 09:56 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 64
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Roman777, теперь все работает нормально.
Спасибо.
 
Ответить
СообщениеRoman777, теперь все работает нормально.
Спасибо.

Автор - ВасилисаЛукьянчикова
Дата добавления - 23.11.2018 в 09:56
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!