Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Общие вопросы .NET
Регистрация

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

Ответ
 
Опции темы
Старый 19.10.2017, 16:41   #1
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
Репутация: 10
Восклицание Сортировка по столбцам таблицы (MS Excel)

Отсортировать в каждом столбце диапазона ячейки с числовыми данными. Ячейки с нечисловыми данными и пустые не должны перемещаться. Реализовать в отдельном методе запись формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
Когда я нажимаю на кнопку "Решение", у меня ничего не происходит! Помогите мне. Я не знаю, как решить проблему того что ничего не происходит, когда я нажимаю на кнопку "Решение" .
Диапазон Екселя.PNG

Код:

Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
        Dim Диапазон As КлассДиапазон = New КлассДиапазон(Me.Range("diapozonrange"),
                                                          Me.Range("sumelstr"))
        Диапазон.Обработать()
    End Sub
End Class
Class КлассДиапазон
    'Свойство содержащее ссылку на диапазон
    Private diapozonrange As Excel.Range
    Private sumelstr As Excel.Range
    'Конструктор класса (создает экземпляр класса)
    Sub New(diapozonrange As Excel.Range, sumelstr As Excel.Range)
        'Инициализация свойства класса
        Me.diapozonrange = diapozonrange
        Me.sumelstr = sumelstr
    End Sub
 
    'Метод для сортировки ячеек в каждом столбце с числовыми данными и записи формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
    Sub Обработать()
        Try
            Dim i, j As Long
            Dim Ячейка As Excel.Range
            For Each Ячейка In diapozonrange.Cells
                If IsNumeric(Ячейка) And IsNothing(Ячейка) Then
                    For j = 1 To diapozonrange.Columns.Count
                        For i = 1 To diapozonrange.Rows.Count
                            diapozonrange.Sort(Key1:=diapozonrange.Cells(i, j).Value, Order1:=Excel.XlSortOrder.xlAscending, Orientation:=Excel.XlSortOrientation.xlSortColumns)
                        Next i
                    Next j
                End If
            Next Ячейка
 
            For i = 1 To diapozonrange.Rows.Count
                If i < 0 Then
                    sumelstr.Cells(i).formula = "SUM(" & diapozonrange.Rows(i).address(False, False) & ")"
                End If
            Next
 
        Catch ex As Exception
            MessageBox.Show(text:=ex.Message,
                            buttons:=MessageBoxButtons.OK,
                           caption:="Ошибка данных",
                           icon:=MessageBoxIcon.Error)
        End Try
    End Sub
End Class

nightofpromises вне форума   Ответить с цитированием
Старый 19.10.2017, 17:22   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,885
Репутация: 5228
По умолчанию

а разве это не Visual Basic ?
а в MS Excel VBA (Visual Basic for Application) там есть свою ограничения и нюансы.
я ни разу не виде, чтобы в VBA использовалось назначение обработчика событий через handles.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 19.10.2017, 18:32   #3
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а разве это не Visual Basic ?
а в MS Excel VBA (Visual Basic for Application) там есть свою ограничения и нюансы.
я ни разу не виде, чтобы в VBA использовалось назначение обработчика событий через handles.
это VB.Net
Я изменила код сортировки на сортировку методом пузырька. Все равно ничего не выходит
Код:

Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
        Dim Диапазон As КлассДиапазон = New КлассДиапазон(Me.Range("diapozonrange"),
                                                          Me.Range("sumelstr"))
        Диапазон.Обработать()
    End Sub
End Class
Class КлассДиапазон
    'Свойство содержащее ссылку на диапазон
    Private diapozonrange As Excel.Range
    Private sumelstr As Excel.Range
    'Конструктор класса (создает экземпляр класса)
    Sub New(diapozonrange As Excel.Range, sumelstr As Excel.Range)
        'Инициализация свойства класса
        Me.diapozonrange = diapozonrange
        Me.sumelstr = sumelstr
    End Sub

    'Метод для сортировки ячеек в каждом столбце с числовыми данными и записи формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
    Sub Обработать()
        Try
            Dim i, j As Long
            Dim temp As Long
            For j = 1 To diapozonrange.Columns.Count
                For i = 1 To diapozonrange.Rows.Count - 1
                    If IsNumeric(diapozonrange.Cells(i, j)) Then
                        If IsNothing(diapozonrange.Cells(i, j)) Then
                            If (diapozonrange.Cells(i, j) > diapozonrange.Cells(i, j + 1)) Then
                                temp = diapozonrange(i, j)
                                diapozonrange(i, j) = diapozonrange(i, j + 1)
                                diapozonrange(i, j + 1) = temp
                            End If
                        End If
                    End If
                Next i
            Next j

            For i = 1 To diapozonrange.Rows.Count
                If i < 0 Then
                    sumelstr.Cells(i).formula = "SUM(" & diapozonrange.Rows(i).address(False, False) & ")"
                End If
            Next i

        Catch ex As Exception
            MessageBox.Show(text:=ex.Message,
                            buttons:=MessageBoxButtons.OK,
                           caption:="Ошибка данных",
                           icon:=MessageBoxIcon.Error)
        End Try
    End Sub
End Class


Последний раз редактировалось nightofpromises; 19.10.2017 в 18:47.
nightofpromises вне форума   Ответить с цитированием
Старый 19.10.2017, 22:51   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,885
Репутация: 5228
По умолчанию

Цитата:
Сообщение от nightofpromises Посмотреть сообщение
это VB.Net
Я изменила код сортировки на сортировку методом пузырька. Все равно ничего не выходит
Вы меня не поняли.
я говорю о том, что я не уверен, что ваша конструкция в MS Excel работает.

конкрентно вот это:

Цитата:
Сообщение от nightofpromises Посмотреть сообщение
Код:

Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click

у меня нет уверенности, что ваша кнопка с именем btn_reshenie (кстати, а такая кнопка вообще есть?!) получает таким образом назначенный обработчик.


тогда уже так попробывать:
Код:

Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
      MsgBox "On Button Click Fire!"
    End Sub
End Class

но, честно говоря, я не уверен, что сообщение появится после нажатия на кнопку.

А зачем Вам такое назначение?
почему просто не взять и не назначить макрос на кнопку средствами конструктора в MS Excel?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 20.10.2017, 18:12   #5
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
Репутация: 10
Восклицание

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы меня не поняли.
я говорю о том, что я не уверен, что ваша конструкция в MS Excel работает.

конкрентно вот это:


у меня нет уверенности, что ваша кнопка с именем btn_reshenie (кстати, а такая кнопка вообще есть?!) получает таким образом назначенный обработчик.


тогда уже так попробывать:
Код:

Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
      MsgBox "On Button Click Fire!"
    End Sub
End Class

но, честно говоря, я не уверен, что сообщение появится после нажатия на кнопку.

А зачем Вам такое назначение?
почему просто не взять и не назначить макрос на кнопку средствами конструктора в MS Excel?
Сообщение появляется после нажатия на кнопку (ну после того как я код заменила на другой). Вот архив с программой. Помогите мне.
Практическая №4.rar
nightofpromises вне форума   Ответить с цитированием
Старый 20.10.2017, 20:26   #6
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,612
Репутация: 3613
По умолчанию

Код:

If IsNumeric(diapozonrange.Cells(i, j)) Then

Проверяете ячейку, а нужно значение в ячейке.
diapozonrange.Cells(i, j) - это Cell (или Range, забыл уже) с кучей свойств и методов, это не число.
Код:

If IsNumeric(diapozonrange.Cells(i, j).Value) Then

и дальше по коду так же не путаем ячейку и значение, записанное в ячейку.
ячейках будет не жестко заданное число, а формула.
Вообще, там есть нюансы, возможно нужно будет работать со свойством Value2 или FormulaR1C1. Зависит от содержимого ячеек, форматов ячеек и т.д. и т.п.
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Старый 20.10.2017, 20:46   #7
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
Репутация: 10
Печаль

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:

If IsNumeric(diapozonrange.Cells(i, j)) Then

Проверяете ячейку, а нужно значение в ячейке.
diapozonrange.Cells(i, j) - это Cell (или Range, забыл уже) с кучей свойств и методов, это не число.
Код:

If IsNumeric(diapozonrange.Cells(i, j).Value) Then

и дальше по коду так же не путаем ячейку и значение, записанное в ячейку.
ячейках будет не жестко заданное число, а формула.
Вообще, там есть нюансы, возможно нужно будет работать со свойством Value2 или FormulaR1C1. Зависит от содержимого ячеек, форматов ячеек и т.д. и т.п.
так тоже самое выходит
ничего не происходит при нажатии кнопки, даже если я проверяю значение, а не саму ячейку
nightofpromises вне форума   Ответить с цитированием
Старый 20.10.2017, 20:51   #8
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,612
Репутация: 3613
По умолчанию

Дальше проверка идёт:
Код:

If IsNumeric(diapozonrange.Cells(i, j)) Then
                        If IsNothing(diapozonrange.Cells(i, j)) Then

какая ячейка должна быть пустой? А то сначала проверяем, что в ней число, а потом, что в ней нет ничего. естественно ничего обрабатываться не будет.
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Старый 20.10.2017, 21:00   #9
nightofpromises
Пользователь
 
Регистрация: 01.03.2017
Сообщений: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Дальше проверка идёт:
Код:

If IsNumeric(diapozonrange.Cells(i, j)) Then
                        If IsNothing(diapozonrange.Cells(i, j)) Then

какая ячейка должна быть пустой? А то сначала проверяем, что в ней число, а потом, что в ней нет ничего. естественно ничего обрабатываться не будет.
я поменяла условия местами. ничего не изменилось.
nightofpromises вне форума   Ответить с цитированием
Старый 20.10.2017, 21:10   #10
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,612
Репутация: 3613
По умолчанию

Цитата:
Сообщение от nightofpromises Посмотреть сообщение
я поменяла условия местами. ничего не изменилось.
А смысл их местами менять?
Сначала смотрим: ага. пустая ячейка. следующим условием проверяем: в пустой ячейке записано число? естественно дальше этих проверок никуда не уйдём. Тут или ячейка пустая или в ней число. Может вообще это IsNothing выкинуть или чего этим хотите проверить?
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка одинаковых значений по двум столбцам. Excel 2007 Client2006 Microsoft Office Excel 6 15.04.2013 07:00
Сортировка по столбцам. павел павел Microsoft Office Access 28 09.11.2012 20:25
Сортировка по столбцам. (Паскаль) xEk Помощь студентам 0 20.05.2012 12:01
Сортировка по нескольким столбцам таблицы. S_Yevgeniy Помощь студентам 3 27.07.2011 19:03
Сортировка таблицы по нескольким столбцам KobolD Помощь студентам 0 21.06.2010 17:21


04:07.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru