powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Падает на простейшей команде установки формата
19 сообщений из 19, страница 1 из 1
Падает на простейшей команде установки формата
    #38395674
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется макрос завязаный на кнопку в листе Excel.
Макрос благополучно отработан и проблем ниразу не имел :-)

Теперь возникла необходимость вызвать его извне по OLE
Вызываю, он доходит вот до такой строки и падает :-)

Код: vbnet
1.
2.
 ActiveWorkbook.Sheets("Stat").Activate
    ActiveSheet.Columns("L:L").NumberFormat = "General"



Ошибка во вложении.
Так вот чего не так то, есть идеи?
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38395996
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

Может для ячеек листа установлены стили?
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396070
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за стили?
Я ж говорю из Excel макрос отрабатывает без проблем...
Мне кажется тут дело в ссылках на WorkBook, ActiveSheet и т.д.

Переделал код вот так - не помогает:

Код: vbnet
1.
2.
3.
4.
5.
Private Sub FormatCells(aEndOn As Long)
    Application.StatusBar = "Форматируем данные..."
    ActiveWorkbook.Sheets("Статистика").Activate
    With ActiveWorkbook.Sheets("Статистика")
        Columns("L:L").NumberFormat = "General"
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396148
Фотография lbppb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров АндрейЧто за стили?
Я ж говорю из Excel макрос отрабатывает без проблем...
Мне кажется тут дело в ссылках на WorkBook, ActiveSheet и т.д.

Переделал код вот так - не помогает:

Код: vbnet
1.
2.
3.
4.
5.
Private Sub FormatCells(aEndOn As Long)
    Application.StatusBar = "Форматируем данные..."
    ActiveWorkbook.Sheets("Статистика").Activate
    With ActiveWorkbook.Sheets("Статистика")
        Columns("L:L").NumberFormat = "General"



Попробуйте не использоваться ActiveWorkbook и ActiveWorkSheet. Вместо первой ThisWorkbook, а вторую задать явным образом.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396165
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же фигня.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396167
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. При использовании With нужно точку ставить в месте "подрузамевания", в данном случае перед Columns("L:L")
Код: vbnet
1.
2.
 With ActiveWorkbook.Sheets("Статистика")
        Columns("L:L").NumberFormat = "General"

2. У меня что-то подобное было, когда была активна форма на листе, а не его ячейки, поборолось путем выполнения сначала Sheets("Статистика").Range("A1").Activate, а потом уж работа с ячейками. Но что-то сейчас воспроизвести такую ситуацию не смог.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396180
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще идея, может стоит защита листа?
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396192
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неа нет защиты листа.
Я ж говорю если вызываю из Excel все работает...

Попробовал с "." и без них (кстати помоему нет разницы)
Попробовал
Columns("L:L").Activate
Selection.NumberFormat = "General"

Одна шляпа.

Может как еще попробовать? Причем остальные ссылки типа таких работают:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub FormatCells(aEndOn As Long)
    Application.StatusBar = "Форматируем данные..."
    ActiveWorkbook.Sheets("Статистика").Activate
    With ThisWorkbook.Sheets("Статистика")
        '.Columns("L:L").Activate
        'Selection.NumberFormat = "General"
        .Cells(5, 12).FormulaR1C1 = "=ISNUMBER(RC[-1])"
        .Cells(5, 12).AutoFill Destination:=.Range("L5:L" + Trim(Str(aEndOn)))
        '.Columns("R:R").Activate
        'Selection.NumberFormat = "General"
        .Cells(5, 18).FormulaR1C1 = "=ISNUMBER(RC[-2])"
        .Cells(5, 18).AutoFill Destination:=.Range("R5:R" + Trim(Str(aEndOn)))
        '.Columns("D:D,I:I").Activate
        'Selection.NumberFormat = "DD/MM/YYYY hh:mm:ss"
        .Cells(5, 2).Activate
    End With
    
    ActiveWorkbook.Names("StatData").RefersTo = ActiveSheet.Range("B4:U" + Trim(Str(aEndOn)))
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396231
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще есть идея "тупейного" подхода
1. В ручном режиме остановить макрос в месте ошибки, оставить один лист и одну колнку L, сохранить в xlsx.
2. То же самое проделать в OLE режиме.
3. Сравнить содержимое xlsx файлов (разархивировав предварительно), и узнать, чем же разнятся колонки L в xml файлах.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396244
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ваще :-)))
Это ж надо... Возьму на заметку.

Лучше я их оставлю закоменченными. Фиг бы с ними... Тем более что нету у меня Excel 2013 (помоему)
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396260
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставь макрос с форматированием в Excel и делай Run этого макроса из программы.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38396331
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
ActiveWorkbook.Sheets("Статистика").Activate
    With ThisWorkbook.Sheets("Статистика")


Так задумано? Активируете лист активной книги, а все остальное применяете к книге с кодом. Вы из книги запускаете код? Вроде бы извне. Так и делайте все извне, зачем привязываться к активным книгам?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub FormatCells(aEndOn As Long)
    Dim wbAct as Workbook
    set wbAct = ActiveWorkbook 'но если извне, скорее надо objExApp.ActiveWorkbook
    With wbAct.Sheets("Статистика")
        .Columns("L:L").NumberFormat = "" 'если не указать явно - автоматом присвоится формат General
        .Range("L5:L" + Trim(aEndOn)).FormulaR1C1 = "=ISNUMBER(RC[-1])" 'после применения Trim это и так будет значение строкового типа
        .Columns("R:R").NumberFormat = ""
        .Range("R5:R" + Trim(aEndOn)).FormulaR1C1 = "=ISNUMBER(RC[-2])"
        .Range("D1,I1").EntireColumn.NumberFormat = "DD/MM/YYYY hh:mm:ss"
        ActiveWorkbook.Names("StatData").RefersTo = .Range("B4:U" + Trim(aEndOn))
    End With


А вообще уточните, что значит "извне"? Из другой программы или другой книги?
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397302
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не задумано - пробовал по разному никак не заработало.

Извне значит из Oracle Forms.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397453
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

Тогда напишите как подключаетесь к Excel, открываете ли книгу или она открыта.
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397496
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397591
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

Хорошо. Посмотрел. Я так понимаю Вы предлагает нам теперь угадать где расположен макрос? Из кода в той теме видно, что Вы создаете новую книгу. В ней по определению не может быть кода, т.к. Вы его туда не воткнули. Значит код в какой-то другой книге, но в какой опять же нам надо угадывать. К тому же Вы создаете новое приложение Excel - значит там только одна книга - созданная.
неужели для помощи Вам же нам надо из Вас вытягивать весь порядок Ваших действий?
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397653
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен был не прав, держите весь код:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
BEGIN
  MyApp:=OLE2.Create_Obj('Excel.Application');   
  
  MyWorkbooksCollection:=OLE2.GET_OBJ_PROPERTY( MyApp, 'Workbooks' ); 
  
  args := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG( args, 'C:\Templates\Stat.xls' );   
  MyBook:=OLE2.Invoke_Obj( MyWorkbooksCollection,'Open',args ); 
  OLE2.DESTROY_ARGLIST( args);  
  
  myWorksheets:=OLE2.GET_OBJ_PROPERTY( MyBook,'sheets'); 
  
  args := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG( args, 'Статистика' ); 
  MySheet := OLE2.GET_OBJ_PROPERTY( myWorksheets, 'Item', args); 
  OLE2.DESTROY_ARGLIST( args);  
  Ole2.Invoke(mySheet, 'Activate');

  --... заполняем лист данными...

  args := OLE2.CREATE_ARGLIST; 
  OLE2.ADD_ARG( args, 'Module1.FormatSheet' );   
  OLE2.Invoke( MyApp, 'Run', args ); 
  OLE2.DESTROY_ARGLIST( args);



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub FormatCells(aEndOn As Long)
    Application.StatusBar = "Форматируем данные..."
    ActiveWorkbook.Sheets("Статистика").Activate
    With ThisWorkbook.Sheets("Статистика")
        '.Columns("L:L").Activate
        'Selection.NumberFormat = "General"
        .Cells(5, 12).FormulaR1C1 = "=ISNUMBER(RC[-1])"
        .Cells(5, 12).AutoFill Destination:=.Range("L5:L" + Trim(Str(aEndOn)))
        '.Columns("R:R").Activate
        'Selection.NumberFormat = "General"
        .Cells(5, 18).FormulaR1C1 = "=ISNUMBER(RC[-2])"
        .Cells(5, 18).AutoFill Destination:=.Range("R5:R" + Trim(Str(aEndOn)))
        '.Columns("D:D,I:I").Activate
        'Selection.NumberFormat = "DD/MM/YYYY hh:mm:ss"
        .Cells(5, 2).Activate
    End With
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38397673
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и до кучи:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub FormatSheet()
y = 5
While Not IsEmpty(Cells(y, 2)) And Not IsNull(Cells(y, 2))
    y = y + 1
Wend
ClearCells (y)
ThisWorkbook.Names.Add "StatData", Sheets("Статистика").Range("B4:U" + Trim(Str(y - 1)))
FormatCells (y - 1)
End Sub
...
Рейтинг: 0 / 0
Падает на простейшей команде установки формата
    #38398117
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров Андрей,

Если честно, не вижу причин для краха. Либо проблема не в коде. Вы мой код пробовали применить? Без Select-ов который?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub FormatCells(aEndOn As Long)
    Dim wbAct as Workbook
    set wbAct = ActiveWorkbook
    With wbAct.Sheets("Статистика")
        .Columns("L:L").NumberFormat = "" 
        .Range("L5:L" & aEndOn).FormulaR1C1 = "=ISNUMBER(RC[-1])"
        .Columns("R:R").NumberFormat = ""
        .Range("R5:R" & aEndOn).FormulaR1C1 = "=ISNUMBER(RC[-2])"
        .Range("D1,I1").EntireColumn.NumberFormat = "dd/MM/YYYY hh:mm:ss"
    End With


wbAct.Names("StatData").RefersTo = .Range("B4:U" & aEndOn)
и не применяйте знак + при работе со строками в VBA. Там это не приветствуется, в отличие от С. Там для соединения текста используется амперсанд & .
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Падает на простейшей команде установки формата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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