BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Использование специальной вставки при экспорте в Excel

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Использование специальной вставки при экспорте в Excel
 
Здравствуйте!
Начал разбираться с экспортом в EXCEL из БЭСТ4 средствами харбора,столкнулся со следущей проблемой .
Не получается записать код программы для копирования только форматов с использованием специальной вставки .
Может кто подскажет как это сделать?
FUNCTION MAIN
LOCAL oApp,oWorkBook,oRange,oAS
LOCAL nLine:=3
#define xlRight -4152
#define xlBottom -4107
#define xlLeft -4131
#define xlCenter -4108
#define xlLandscape 2
#define xlPasteFormats -4122
#define xlNone = -4142
dbPush()
TRY
oApp := CreateObject( "Excel.Application" )
CATCH
Alert("Excel не доступен!")
RETURN .F.

END

altd()

oWorkBook:=oApp:WorkBooks:Add()
oAS:=oWorkBook:Worksheets():Add()
oAS:Name:="Test"
Вот так выглядет макрос автоматически созданный в EXCEL:

Range("B16:Y16").Select
Selection.Copy
Range("B17").Select
Selection.PasteSpeial Paste:=xlPasteFormats,_ Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Вот я так его переписал:

oRange:=oAS:Range("B16:Y16")
altd()
oRange:Copy (oAS:Range("B17"))
oAS:Range("B17"):Select()
// Selection:PasteSpecial (Paste:=xlPasteFormats,_ Operation:=xlNone, SkipBlanks:=.F., Transpose:=.F.)

Ругается на ошибку в этой строке - "Переменная не существует":

Selection:PasteSpecial (Paste:=-4122, Operation:=-4142,_ SkipBlanks:=.F., Transpose:=.F.)


oApp:visible:=.T.
dbPop()
RETURN
 
Добрый день.

Цитата
gabov пишет:
Ругается на ошибку в этой строке - "Переменная не существует":
Selection:PasteSpecial (Paste:=-4122, Operation:=-4142,_ SkipBlanks:=.F., Transpose:=.F.)


Это нотация VBA. Вам надо написать проще:
Selection:PasteSpecial (-4122, -4142, .F., .F.)
С уважением, Новиков Алексей.
 
Хотя, что-то там не так всё просто с копированием-вставкой.
Если получится, то Хорошо, если нет, будем разбираться.
С уважением, Новиков Алексей.
 
Здравствуйте!
Заменил код на
Selection:PasteSpecial (-4122, -4142, .F., .F.)
Но сообщение об ошибке все равно появляется.
С уважением Габов Алексей.
 
Цитата
gabov пишет:
Здравствуйте!
Заменил код на
Selection:PasteSpecial (-4122, -4142, .F., .F.)
Но сообщение об ошибке все равно появляется.
С уважением Габов Алексей.

Добрый день!
Не очень понял насчет использования PasteSpecial, наверное лучше описать задачу словами. А обычное копирование и вставка делаются в Б4 следующим образом:
Wvt_SetClipBoard(cBuffer)
oAs:Cells(nRow0,1):Select()
oAS:Paste()
 
У меня работает такой кусок кода. Без Activate почему-то не вставлялось. Возможно это связано с использованием rows.
Код
        oRange:=oWorkSheet:Rows(nCopyLine), ;
        oRange:activate(), ;
        oRange:Copy(), ;
        oRange:=oWorkSheet:Rows(nLine), ;
        oRange:activate(), ;
        oWorkSheet:Paste(), ;
С уважением, Новиков Алексей.
 
Ошибка "Переменная не существует" выдаётся потому, что в вызове "Selection:PasteSpecial (-4122, -4142, .F., .F.)" Harbour видит переменную selection, которой не существует. Так можно делать в VBA, а в Harbour требуется иметь ссылку на каждый объект.
С уважением, Новиков Алексей.
 
Алексей ,спасибо!
Заменил Selection на oAS:Range("B17") и
oRange:Copy(oAS:Range("B17")) на oRange:Copy()
(это моя ошибка) и "специальная вставка" заработала.

Только есть еще проблема.
После выполнения кода написанного мной ,так и после
который Вы указали :
Цитата
Алексей Новиков пишет:
oRange:=oWorkSheet:Rows(nCopyLine), ;
oRange:activate(), ;
oRange:Copy(), ;
oRange:=oWorkSheet:Rows(nLine), ;
oRange:activate(), ;
oWorkSheet:Paste(), ;

тот диапазон ячеек ,который копировали, остается
выделенный пунктирной рамкой.
Как снять выделение и очистить буфер обмена?
Попробовал посмотреть через макросы - получилось
oApp:CutCopyMode =.F.
Но это не помогает.

Цитата
Александр Титов пишет:
Не очень понял насчет использования PasteSpecial, наверное лучше описать задачу словами


Необходимо создать n количество строк, ячейки в которых должны быть отформатированы по определенному шаблону раннее уже прописанному в коде программы.
Вот и возникла Идея как это быстро и компактно сделать.
Выделяем уже отформатированный диапазон ячеек и через специальную вставку копируем только форматы.
Может это делается как то иначе?
И еше Вопрос.
Можно ли как-то определить правила написания кода для EXEL ,которые в VBA работают, а в харборе нет .Например, то что указал Алексей Новиков
Цитата
Алексей Новиков пишет:
Ошибка "Переменная не существует" выдаётся потому, что в вызове "Selection:PasteSpecial (-4122, -4142, .F., .F.)" Harbour видит переменную selection, которой не существует. Так можно делать в VBA, а в Harbour требуется иметь ссылку на каждый
объект.
 
По поводу Excel.
В харбор встроен скрипт VBA. От exel он отличается синтаксисом.
Проблемы написания чаще связаны с самим Exel.
Уже неоднократно было подмечено, что скрипт написанный для
Excel 2000 не факт, что будет работать в excel 2003 и решение
перестает работать и приходится подбирать другие пути и бывало
наоборот.
Я делаю обычно следующим образом: в самом exel включаю создание
макроса и дальше этот макрос перерабатываю по синтаксу в харбор.
Переменные, если они не объявлены в excel.ch меняю на числовые значения.
Далее, для того чтобы понять как и что работает в отладчике в командной строке пишу вариации команд на скрипте VBA и становится
понятно в каком написании переменная не определена, а в каком
она же вдруг начинает работать.

Для работы с буфером чаще всего пользуюсь
Wvt_SetClipBoard(cBuffer)
Над очисткой не задумывался, возможно если cBuffer:=''
Вы получите желаемое
 
А БЭСТ с Microsoft Office 2007 нормально работает?
 
А что ему должно мешать работать?
Не вижу препятствий
 
Цитата
nordk пишет:
А что ему должно мешать работать?Не вижу препятствий


Похоже ничего и не мешает. Просто на одном компьютере плагин перестал работать и там как раз офис переставили. При ближайшем рассмотрение выяснилось, что офис 2007 не причем.
Страницы: 1
Читают тему (гостей: 1)