powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка в макросе Excel
13 сообщений из 13, страница 1 из 1
Ошибка в макросе Excel
    #38335191
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Прошу помочь специалистов. Я сам программирую Excel.VBA "постольку, поскольку"... Может, вопрос не стоит выеденного яйца. В общем, в куске кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    EndRow = LastRow(ColoredRow, ColoredColumn)
    Const Delta = 6
    With Cells(EndRow + Delta, 1)
        .Value = "Прибытие от 13 до 55 дней назад"
        .Font.ColorIndex = 13
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
    End With


на строке .Font.ColorIndex = 13 и далее выдается ошибка "Нельзя установить свойство ColorIndex класса Font"
Если попытаться в дебаггере в этот момент просмотреть значения в объекте Cells(EndRow + Delta, 1), то практически все равны "Невозможно получить свойство <такое-то>". При этом Value равно "Прибытие от 13 до 55 дней назад"
Свойство Locked тоже "Невозможно получить..."
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335216
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vikong,

НЕ ПОНЯЛА СТРОКИ
Код: vbnet
1.
LastRow(ColoredRow, ColoredColumn)



остальное отработало
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335222
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня проблема не воспроизводится. Выложите файл с фрагментом кода.
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335244
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие-то локальные настройки конфликтуют.

Код: vbnet
1.
.ColorIndex =xlcolor1 


(2,3)
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335257
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, "глючный" файл выложить не могу, так как это динамически формируемый отчет, генерируемый из моего приложения. Выкладываю отчет, на котором макрос отработал. Вот код макроса полностью (раскраска колонки "Дата прибытия")
Код: 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.
Sub ColorCarArrive()

    Const ColoredRow = 8
    Dim EndRow As Long, ColoredColumn As Long
    
    Cells(3, 4).FormulaR1C1 = "=DATE(YEAR(R[-1]C),MONTH(R[-1]C),DAY(R[-1]C))"
    ColoredColumn = 3
    EndRow = LastRow(ColoredRow, ColoredColumn)
    With ActiveSheet.Range(Cells(ColoredRow, ColoredColumn), Cells(EndRow, ColoredColumn))
        .FormatConditions.Delete
        
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
            Formula1:="=$D$3-55", Formula2:="=$D$3-12"
        .FormatConditions(1).Font.ColorIndex = 13
       
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
            Formula1:="=$D$3-109", Formula2:="=$D$3-54"
        .FormatConditions(2).Font.ColorIndex = 3
        
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
            Formula1:="=$D$3-109"
        .FormatConditions(3).Font.ColorIndex = 45
    
    End With
    
    Const Delta = 6
    With Cells(EndRow + Delta, 1)
        .Value = "Прибытие от 13 до 55 дней назад"
        .Font.ColorIndex = 13
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
    End With
    
    With Cells(EndRow + Delta + 1, 1)
        .Value = "Прибытие от 55 до 100 дней назад"
        .Font.ColorIndex = 3
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
    End With

    With Cells(EndRow + Delta + 2, 1)
        .Value = "Прибытие от 110 дней и ранее"
        .Font.ColorIndex = 45
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
    End With
End Sub
Function LastRow(Row, Col) As Long
    Dim EndRow As Long
    EndRow = Cells(Row, Col).End(xlDown).Row
    If EndRow > 65535 Then EndRow = Cells(EndRow, Col).End(xlUp).Row
    LastRow = EndRow
End Function
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335260
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VikongВыкладываю отчет, на котором макрос отработалвам нужно починить, который НЕ отработал или который отработал?
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335273
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proвам нужно починить, который НЕ отработал или который отработал?
Так как отчет генерируется динамически, то нужно как-то "выковырять" эти данные, вызывающие трабл. Я был бы благодарен, если бы мне подсказали, как это сделать. То есть, мое приложение создает объект Excel, заполняет странички данными и запускает макрос. Где хранятся эти самые данные до сохранения в файл? Это можно как-то выяснить из дебаггера Excel.VBA?
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335280
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "где хранятся"? Вы запускаете эксель, создаете книгу, в этой книге они и хранятся. Что мешает сохранить эту книгу?
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335286
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, поставь в начале процедуры Stop, да посмотри.
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335384
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vikong,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function LastRow(Row, Col) As Long
    Dim EndRow As Long
    EndRow = Cells(Row, Col).End(xlDown).Row
  Debug.Print EndRow
    If EndRow > 65535 Then EndRow = Cells(EndRow, Col).End(xlUp).Row
  Debug.Print EndRow
    LastRow = EndRow

End Function
Sub ColorCarArrive()

    Const ColoredRow = 8   '''ОЧЕНЬ СМУЩАЕТ, ЗАЧЕМ ЗАДАНО КОНСТАНТОЙ
    Dim EndRow As Long, ColoredColumn As Long
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38335447
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function LastRow(Row, Col) As Long
    Dim EndRow As Long
    EndRow = Cells(Row, Col).End(xlDown).Row
  Debug.Print EndRow
    If EndRow > 65535 Then EndRow = Cells(EndRow, Col).End(xlUp).Row
  Debug.Print EndRow
    LastRow = EndRow

End Function
Sub ColorCarArrive()

    Const ColoredRow = 8   '''ОЧЕНЬ СМУЩАЕТ, ЗАЧЕМ ЗАДАНО КОНСТАНТОЙ
    Dim EndRow As Long, ColoredColumn As Long


Потому что у меня отчет генерируется автоматически, и другой строки там быть не может. Данные начинаются строго с 8ой строки. Потому и константа.
Еще выяснилось, что иногда, во время выполнения макроса, Excel вообще "умирает" и воскресает с предложение открыть последний файл
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38336574
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полная ж...
Сидел до посинения, но что-то начало проясняться.
Когда в настройках Excel выбираешь уровень безопасности средний и выше, то все работает нормально. При чем, как ни странно, макросы отрабатывают на любом уровне безопасности, в том числе и на среднем, если запрещать вручную.
Если установлен уровень безопасности низкий, то начинаются чудеса. То Excel умирает с реинкарнацией, то вообще намертво виснет, то появляется вышеописанный эффект.

Траблы начались после какого-то то ли апдейта, то ли какой-то настройки админами антивируса Касперского. Админ, вроде, подтверждает мои подозрения.
...
Рейтинг: 0 / 0
Ошибка в макросе Excel
    #38343367
Vikong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, что выяснилось.
При запуске макроса напрямую через Excel, отрабатывает всегда.
При запуске макроса через экземпляр COM-сервера Excel.Application, наблюдался вышеописанный эффект или полное зависание Excel'я. Причём, порой наблюдалось зависание даже при попытке открыть файл, содержащий какие-либо макросы.
Помогло отключение антивируса Касперского (8, серверная)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка в макросе Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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