AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2012, 14:26   #1  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Всем привет!
Возник вопрос - как в excel скопировать значение ячейки
Код примерно следующий (xlWorkSheet Automation.Worksheet)
....
xlWorkSheet.Range('A1').Value := 'Абракадабра';
xlWorkSheet.Range('B1').Formula := '=A1';
xlWorkSheet.Range('B1').Copy;
xlWorkSheet.Range('C1').PasteSpecial(5); {вставка значений из буфера, я так думаю...}
.....

В получившемся excel видно, что ячейка C1 пустая.
Как сделать, чтобы там было значение то, что видно в B1.

Сам excel подобное копирование со вставкой значений делает через переменную Selection
Может кто знает как можно здесь использовать Automation Selection?

Спасибо!
Старый 17.04.2012, 15:18   #2  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Напишите вместо последней строчки
xlWorkSheet.Range('C1').Select;
xlWorkSheet.Paste;
Старый 17.04.2012, 15:19   #3  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
вместо "5" нужно подставить "-4163"

нашел в справке по VBA метода PasteSpecial объекта Range.
Значение "5" там кста нету.

Юр, только засорять буфер в темную это моветон, имхо.
И селектион трогать не советую!
Старый 17.04.2012, 15:39   #4  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
вместо "5" нужно подставить "-4163"

нашел в справке по VBA метода PasteSpecial объекта Range.
Значение "5" там кста нету.

Юр, только засорять буфер в темную это моветон, имхо.
И селектион трогать не советую!
Эмпирически нашел, что нужно было подставить 4!
Спасибо за подсказку )))
А разве можно без засорения буфера это сделать?
Старый 17.04.2012, 15:41   #5  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от Milk Посмотреть сообщение
Напишите вместо последней строчки
xlWorkSheet.Range('C1').Select;
xlWorkSheet.Paste;
Milk, этот вариант делает не то что мне нужно...
Старый 17.04.2012, 15:54   #6  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Цитата:
Сообщение от mandrake Посмотреть сообщение
Цитата:
Сообщение от InTacto Посмотреть сообщение
вместо "5" нужно подставить "-4163"

нашел в справке по VBA метода PasteSpecial объекта Range.
Значение "5" там кста нету.

Юр, только засорять буфер в темную это моветон, имхо.
И селектион трогать не советую!
Эмпирически нашел, что нужно было подставить 4!
Спасибо за подсказку )))
А разве можно без засорения буфера это сделать?
Если нужно получить значение формулы, то по-моему можно вызвать ее вычисление и получить значение, а потом подставить в нужную ячейку.
Старый 17.04.2012, 16:03   #7  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Значения ячеек:
E3 "=D3+D4"
D3 = "2250"
D4 = "99"

Код:
a.Range("F3").Value = a.Range("E3").Value
Результат:
F3 = "2349"
Старый 17.04.2012, 16:03   #8  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение

Если нужно получить значение формулы, то по-моему можно вызвать ее вычисление и получить значение, а потом подставить в нужную ячейку.
Иногда бывает так, что значение слишком большое (> 255 или даже > 1024 символов)

Кстати новым эмпирическим путем выяснил, что нужно все таки значение параметра = 3!
Тогда копируется именно значение
Старый 17.04.2012, 16:09   #9  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
Значения ячеек:
E3 "=D3+D4"
D3 = "2250"
D4 = "99"

Код:
a.Range("F3").Value = a.Range("E3").Value
Результат:
F3 = "2349"
Respect!
Век живи, век учись! ))
Старый 17.04.2012, 16:24   #10  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Только боюсь с большими значениями может все равно неувязочка выйти.
Если формула не вычислилась, то нужно вызвать calculate для ячейки.

А еще вопрос чисто педогагический.
у ф-ции PasteSpecial аж целых 4 параметра, все необязательные. Тот который был нужен оказался 2 по счету, и у него действительно есть значения 3,5, а -4163 относилось к первому параметру. Так вот мне кажется, что не обязательные параметры для внешних компонент в навике отсутствуют, вызвать такие ф-ции без указания всех параметров не удается.
Как удалось запустить этот код
Код:
 xlWorkSheet.Range('C1').PasteSpecial(5)
?
Старый 17.04.2012, 16:31   #11  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от InTacto Посмотреть сообщение
Только боюсь с большими значениями может все равно неувязочка выйти.
Если формула не вычислилась, то нужно вызвать calculate для ячейки.

А еще вопрос чисто педогагический.
у ф-ции PasteSpecial аж целых 4 параметра, все необязательные. Тот который был нужен оказался 2 по счету, и у него действительно есть значения 3,5, а -4163 относилось к первому параметру. Так вот мне кажется, что не обязательные параметры для внешних компонент в навике отсутствуют, вызвать такие ф-ции без указания всех параметров не удается.
Как удалось запустить этот код
Код:
 xlWorkSheet.Range('C1').PasteSpecial(5)
?
Я там ошибся
с "5" - вываливалась ошибка
С "4" ошибки уже не было
Старый 17.04.2012, 16:40   #12  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Она могла быть вызвана другими причинами. Я думаю дело в другом.
Я даже не совсем правильно описал ситуацию, нельзя указать второй параметр без того, чтобы не указать первый.
А тут это возможно прокатило, потому как доступ к ней осуществлен через аутомайшен листа и компилятору уже не доступны описания этой ф-ции. Если завести аутомайшен для range, то такой вызов ф-ции вызвал бы ошибку на этапе компиляции.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:34.