Страница 1 из 1

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

Добавлено: 06 Сентябрь 2006, 23:39
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. А как передать параметры процедуре?

Добавлено: 07 Сентябрь 2006, 0:43
Andrew Listiev
Кавычку последнюю на позицию вправо :D

Добавлено: 07 Сентябрь 2006, 23:45
BBR
Спасибо Андрей за замечание, но это ошибка чисто при наборе в форуме.
mExcel{'ActiveSheet.Copy(After=ActiveSheet)'}

Добавлено: 08 Сентябрь 2006, 9:15
Дед Пахом
Попробуй эту операцию воспроизвести прямо в Excel с записью макроса VBA и посмотри на получившийся код этого макроса, может будут отличия от кода VB?

Добавлено: 08 Сентябрь 2006, 9:45
Admin
В макросе Excel так и пишется как в VB:

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

Sub CopySheet()
 ActiveSheet.Copy after:=ActiveSheet
End Sub

Добавлено: 08 Сентябрь 2006, 10:21
Дед Пахом
Отличие (от приведённого примера на Clarion) есть - after:=ActiveSheet (двоеточие и =). Может, оно?

Добавлено: 08 Сентябрь 2006, 10:27
Admin
Может быть и в этом дело т.к. без двоеточия орет - "Object doesn't support this property or method (Error 438)"

Добавлено: 08 Сентябрь 2006, 10:42
Admin
Вот такая команда прекрасно работает!

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

?ExcelOle{'ActiveSheet.Copy after:=ActiveSheet'}

Добавлено: 08 Сентябрь 2006, 17:38
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