powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA ошибка при сортировке таблицы
10 сообщений из 10, страница 1 из 1
VBA ошибка при сортировке таблицы
    #39259310
arefeva_au
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, код выдает Выдает ошибку Run-time error 1004 Application-defined or object-defined error на сортировке
В трех словах о том что должно получиться в итоге
Я считаю количество одинаковых значений (ячеек, строк) в первом столбце, потом хочу выделить это количество строк в остальных трех столбцах и отсортировать уже эти выделенные ячейки.
Если Вручную написать первую ячейку, то все работает, а если переменной, от уже нет. Типы данных подаю строку.
Помогите разобраться, пожалуйста.

Код: vbnet
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.
Sub сортировка_2_столбец()
Range("AJ1").Select
k = 0: n = 1
Do While IsEmpty(ActiveCell) = False: k = k + 1: ActiveCell.Offset(1, 0).Select: Loop
Range("AJ1").Select
Stop1 = "AJ" & (ActiveCell.Row + k)
Stop2 = "AJ1" & ":" & Stop1
Do While ActiveCell = ActiveCell.Offset(1, 0): n = n + 1: ActiveCell.Offset(1, 0).Select: Loop

Nachalo = Chr(ActiveCell.Column / 26 + 64) & Chr(ActiveCell.Column Mod 26 + 65) & (ActiveCell.Row + 1 - n)
Konec = Chr(ActiveCell.Column / 26 + 64) & Chr(ActiveCell.Column Mod 26 + 67) & (ActiveCell.Row)

Range(Nachalo & ":" & Konec).Select

' сортировка автоматическая
Selection.Sort Key1:=Range(Nachalo), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchElseIf:ъlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

' сортировка ручная
Selection.Sort Key1:=Range("AK1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:ъlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39259338
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arefeva_au
Код: vbnet
1.
MatchElseIf:ъlse
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39259369
arefeva_au
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, подсказали )
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39259418
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, это тот самый случай, когда необходимо создавать сразу две темы в разных форумах..
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39259894
Cursky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arefeva_au,
Вот, записал только что макрорекордером - работает. У вас наверное Эксель древний?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    With ActiveWorkbook.ActiveSheet.Sort.SortFields
        .Clear
        .Add Key:=Range(Nachalo), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With

    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range(Nachalo & ":" & Konec)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39394468
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже возникает ошибка Run-time error 1004 Application-defined or object-defined error но не на методе .Sort() а на методе .Select():

Код: vbnet
1.
2.
3.
4.
ThisWorkbook.Worksheets("Лист 1").Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort key1:=Range("B2"), order1:=xlAscending, Header:=xlYes



Проверял эти строки кода в отдельном модуле - работают без ошибок.
Пробовал сортировать Range("A1:IV30000"), то возникает та же проблема.

Полный код:

Код: vbnet
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.
87.
88.
Option Explicit
Sub fGrafik()

    Dim dStartDate As Date
    dStartDate = CDate(InputBox("Введите дату начала работы в формате ДД.ММ.ГГГГ: ")) ' значение не влияет, но здесь ввожу 
' обычно 08.02.2017
    Dim nRowIndex, nRowMaxIndex As Long
    Dim nColIndex As Long
    Dim nNullNameCounter, nAlienNameCounter, nWithoutDate As Long
    Dim oResultWorksheet As Worksheet
    Dim sCellValBuff As String
    ' удаляем ненужные столбцы из отчета
    ' переделать в цикл с проверкой
    For nColIndex = 1 To ThisWorkbook.Worksheets("Лист 1").Range("IV1").End(xlToLeft).Column
        If Not (UCase(ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value) Like "НАЗВАНИЕ ОБЪЕКТА" _
        Or UCase(ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value) Like "ФИЛИАЛ" _
        Or UCase(ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value) Like "КОД" _
        Or UCase(ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value) Like "СРОК ОКОНЧАНИЯ ДЕЙСТВИЯ КЛЮЧА") _
        And ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value <> 0 Then
            ThisWorkbook.Worksheets("Лист 1").Columns(nColIndex).Delete
            nColIndex = nColIndex - 1
        End If
    Next
    nColIndex = ThisWorkbook.Worksheets("Лист 1").Range("IV1").End(xlToLeft).Column + 1
    'добавляем нужные
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).NumberFormat = "General"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex).Value = "Дата"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 1).NumberFormat = "General"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 1).Value = "Контроль"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 2).NumberFormat = "General"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 2).Value = "Ответственный"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 3).NumberFormat = "General"
    ThisWorkbook.Worksheets("Лист 1").Cells(1, nColIndex + 3).NumberFormat = "Статус"
    ' обрабатываем строки
    nRowMaxIndex = ThisWorkbook.Worksheets("Лист 1").Range("A65536").End(xlUp).Row
    nRowIndex = 2
    While nRowIndex <= nRowMaxIndex
        ' меняем числовой формат ячеек с наименованием филиала и конвертируем значения
        ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 2).NumberFormat = "@"
        ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 2).Value = CStr(ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 2).Value)
        sCellValBuff = ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 2).Value
        ' удяляем строки без названия и чужие
        If ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 1).Value = " " Then
            nNullNameCounter = nNullNameCounter + 1
            ThisWorkbook.Worksheets("Лист 1").Rows(nRowIndex).Delete
            nRowIndex = nRowIndex - 1
            nRowMaxIndex = nRowMaxIndex - 1 'при удалении строки следует уменьшать верхний предел проверки
        ElseIf UCase(sCellValBuff) Like "* МК*" Then ' проверяем тип оо при наличии имени
            nAlienNameCounter = nAlienNameCounter + 1
            ThisWorkbook.Worksheets("Лист 1").Rows(nRowIndex).Delete
            nRowIndex = nRowIndex - 1
            nRowMaxIndex = nRowMaxIndex - 1 'при удалении строки следует уменьшать верхний предел проверки
        Else
            ' меняем числовой формат ячеек с датой и конвертируем значения
            If ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value = 0 _
            Or ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value = #1/1/2000# Then
                ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).NumberFormat = "dd/mm/yyyy"
                ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value = CDate(ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value)
                nWithoutDate = nWithoutDate + 1
            Else
                ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).NumberFormat = "dd/mm/yyyy"
                ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value = CDate(ThisWorkbook.Worksheets("Лист 1").Cells(nRowIndex, 4).Value)
            End If
        End If
    nRowIndex = nRowIndex + 1
    Wend
    ' выводим результат на отдельную страницу
    Set oResultWorksheet = Worksheets.Add
    oResultWorksheet.Name = "Результат" & Replace(Time(), ":", "_")
    oResultWorksheet.Cells(1, 1).NumberFormat = "General"
    oResultWorksheet.Cells(1, 1).Value = "Удалено строк без названия: "
    oResultWorksheet.Cells(1, 2).NumberFormat = "General"
    oResultWorksheet.Cells(1, 2).Value = nNullNameCounter
    oResultWorksheet.Cells(2, 1).NumberFormat = "General"
    oResultWorksheet.Cells(2, 1).Value = "Удалено:"
    oResultWorksheet.Cells(2, 2).NumberFormat = "General"
    oResultWorksheet.Cells(2, 2).Value = nAlienNameCounter
    oResultWorksheet.Cells(3, 1).NumberFormat = "General"
    oResultWorksheet.Cells(3, 1).Value = "Строк без даты: "
    oResultWorksheet.Cells(3, 2).NumberFormat = "General"
    oResultWorksheet.Cells(3, 2).Value = nWithoutDate
    ' сортируем список ОО по дате
    ThisWorkbook.Worksheets("Лист 1").Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort key1:=Range("B2"), order1:=xlAscending, Header:=xlYes
    
End Sub
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39394610
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislavik,

Код: vbnet
1.
ThisWorkbook.Worksheets("Лист 1").Range("A1").Select


если в этот момента активна другая книги или другой лист - все логично. Нельзя выделять ячейку не на активном листе. Поэтому:
Код: vbnet
1.
2.
3.
ThisWorkbook.Activate
Worksheets("Лист 1").Activate
Range("A1").Select
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39394676
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Благодарю за урок. Твой код работает.
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39394684
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
VBA ошибка при сортировке таблицы
    #39394932
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Полезная информация. Тебе, тоже спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA ошибка при сортировке таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]