Помогите перевести VBа на CLARION

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
BBR
Посетитель
Сообщения: 31
Зарегистрирован: 03 Декабрь 2005, 19:25
Откуда: Беларусь

Помогите перевести VBа на CLARION

Сообщение BBR »

Подскажите как правильно перевести команды с VB на язык Clarion
VB
ActiveSheet.Copy after:=ActiveSheet
Clarion
mExcel{'ActiveSheet.Copy(After=ActiveSheet')}

В результате под VB все нормально, а в Clarion
ошибка.
У меня WINDOWS 2000 Offic 2000
Clarion 6.3 build 9052

У меня сложилось впечатления, что не передаются
параметры в процедуру VB. Если в VB проходит вызов
на пример: Sheet(2).Select, то это хорошо отрабатывает
и в Clarion. А как передать параметры процедуре?
...
Аватара пользователя
Andrew Listiev
Активист
Сообщения: 166
Зарегистрирован: 07 Июль 2005, 11:16
Откуда: Латвия, Рига

Сообщение Andrew Listiev »

Кавычку последнюю на позицию вправо :D
BBR
Посетитель
Сообщения: 31
Зарегистрирован: 03 Декабрь 2005, 19:25
Откуда: Беларусь

Сообщение BBR »

Спасибо Андрей за замечание, но это ошибка чисто при наборе в форуме.
mExcel{'ActiveSheet.Copy(After=ActiveSheet)'}
...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Попробуй эту операцию воспроизвести прямо в Excel с записью макроса VBA и посмотри на получившийся код этого макроса, может будут отличия от кода VB?
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

В макросе Excel так и пишется как в VB:

Код: Выделить всё

Sub CopySheet()
 ActiveSheet.Copy after:=ActiveSheet
End Sub
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Сообщение Дед Пахом »

Отличие (от приведённого примера на Clarion) есть - after:=ActiveSheet (двоеточие и =). Может, оно?
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Может быть и в этом дело т.к. без двоеточия орет - "Object doesn't support this property or method (Error 438)"
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Вот такая команда прекрасно работает!

Код: Выделить всё

?ExcelOle{'ActiveSheet.Copy after:=ActiveSheet'}
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
BBR
Посетитель
Сообщения: 31
Зарегистрирован: 03 Декабрь 2005, 19:25
Откуда: Беларусь

Сообщение BBR »

Для работы с EXCEL использую ExcelClass
в программе даю команду:
mExcel.SendCommand('ActiveSheet.Copy after:=ActiveSheet')
страница копируется, но во вновь созданную книгу,
анологично происходит если выполнить команду VB
без параметров. В чем ошибка? В описании класса?


!ExcelClass
MEMBER

!_ABCDllMode_ EQUATE(0) ! Для С5 раскомментировать
!_ABCLinkMode_ EQUATE(1) ! Для С5 раскомментировать

MAP
END
INCLUDE('abxl.inc'),ONCE

ExcelClass.Init PROCEDURE(<STRING OpenFile>)
OpenStr string(128)
Filnam string(128)
ln short
CODE
IF ~SELF.Controls
SELF.Controls = CREATE(0, CREATE:OLE)
if errorcode()>0
!Message(error(), 'Класс EXCEL', ICON:Exclamation , BUTTON:Yes)
.
SELF.x = 1
SELF.y = 1
END

SELF.Controls{PROP:Create} = 'Excel.Application'

IF OpenFile
filnam = PATH()
ln = LEN(CLIP(filnam))
IF filnam[ln]<>'\' THEN filnam = CLIP(filnam) & '\'.
IF INSTRING('\',CLIP(OpenFile))
OpenStr = 'Application.Workbooks.Open("' & CLIP(OpenFile) &'")'
ELSE
filnam = CLIP(filnam) & OpenFile
OpenStr = 'Application.Workbooks.Open("' & CLIP(filnam) &'")'
.
ELSE
OpenStr = 'Application.Workbooks.Add'
END
SELF.Controls{OpenStr}
Self.SaveFile = Self.Controls{'Application.ActiveWorkbook.FullName'}


!Выполнить команду VBA
ExcelClass.SendCommand PROCEDURE(STRING OleCommand)
CODE
! UNLOCKTHREAD
SELF.Controls{OleCommand}
! LOCKTHREAD
...
Ответить