Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ошибка в макросе Excel / 13 сообщений из 13, страница 1 из 1
18.07.2013, 11:01
    #38335191
Vikong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Привет всем!
Прошу помочь специалистов. Я сам программирую 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
18.07.2013, 11:11
    #38335216
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Vikong,

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



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

Код: vbnet
1.
.ColorIndex =xlcolor1 


(2,3)
...
Рейтинг: 0 / 0
18.07.2013, 11:36
    #38335257
Vikong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
К сожалению, "глючный" файл выложить не могу, так как это динамически формируемый отчет, генерируемый из моего приложения. Выкладываю отчет, на котором макрос отработал. Вот код макроса полностью (раскраска колонки "Дата прибытия")
Код: 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
18.07.2013, 11:38
    #38335260
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
VikongВыкладываю отчет, на котором макрос отработалвам нужно починить, который НЕ отработал или который отработал?
...
Рейтинг: 0 / 0
18.07.2013, 11:46
    #38335273
Vikong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Shocker.Proвам нужно починить, который НЕ отработал или который отработал?
Так как отчет генерируется динамически, то нужно как-то "выковырять" эти данные, вызывающие трабл. Я был бы благодарен, если бы мне подсказали, как это сделать. То есть, мое приложение создает объект Excel, заполняет странички данными и запускает макрос. Где хранятся эти самые данные до сохранения в файл? Это можно как-то выяснить из дебаггера Excel.VBA?
...
Рейтинг: 0 / 0
18.07.2013, 11:48
    #38335280
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Что значит "где хранятся"? Вы запускаете эксель, создаете книгу, в этой книге они и хранятся. Что мешает сохранить эту книгу?
...
Рейтинг: 0 / 0
18.07.2013, 11:50
    #38335286
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Ну, поставь в начале процедуры Stop, да посмотри.
...
Рейтинг: 0 / 0
18.07.2013, 12:38
    #38335384
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
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
18.07.2013, 13:03
    #38335447
Vikong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
ПЕНСИОНЕРКА
Код: 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
19.07.2013, 11:15
    #38336574
Vikong
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в макросе Excel
Полная ж...
Сидел до посинения, но что-то начало проясняться.
Когда в настройках Excel выбираешь уровень безопасности средний и выше, то все работает нормально. При чем, как ни странно, макросы отрабатывают на любом уровне безопасности, в том числе и на среднем, если запрещать вручную.
Если установлен уровень безопасности низкий, то начинаются чудеса. То Excel умирает с реинкарнацией, то вообще намертво виснет, то появляется вышеописанный эффект.

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


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