Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

20 Ноябрь 2019, 08:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Апостроф в результате работы макроса  (Прочитано 1086 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Стартовое сообщение: 25 Октябрь 2019, 16:57 »

Приветствую всех!

Есть макрос, который большой массив формул копирует и вставляет как значения:

 Range("H3:O20000").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Все ячейки отформатированы как число.
Результат формул тоже числа.
Но после выполнения макроса он все числа вставляет как текст, в каждую ячейку добавив апостроф перед значением.
Подскажите пожалуйста, как изменить код, чтобы он вставлял данные именно как числа?
Спасибо!
Записан
economist
Форумчанин
***
Online Online

Сообщений: 1 033


« Ответ #1: 25 Октябрь 2019, 17:09 »

Форматирование ячейки - не меняет её содержимого, и того что копируется макросом. Но может влиять на реализацию VBA в SB.
В первую очередь я бы убедился, что в ячейках именно числа. Самое простое: протянуть выделение мышью - ячейки должны суммироваться в строке состояния.

Если что=то копировали извне, скажем из 1С - то формат чисел м.б. особый (разделители разрядов-триад, десятичная точка/зпт), вот Calc и посчитает это не числом, а текстом, и вставит его с '
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #2: 25 Октябрь 2019, 18:04 »

Значения ячеек копируются не из вне.
В данных ячейках макрос вводит формулы и вставляет значения в эти же ячейки.
До запуска макроса все ячейки вычисляются и содержат числа, которые участвуют в вычислении других результатов.
Но множество строк с формулами сильно замедляет работу приложения.
Так как для дальнейшей работы сами формулы уже не нужны, я копирую эти ячейки и вставляю как значения.
Но после выполнения макроса те числа которые до его выполнения были таки числами, становятся текстом поскольку в ячейке появляется апостроф.
Естественно что их перестают распознавать формулы.

 
« Последнее редактирование: 26 Октябрь 2019, 18:26 от Konstanta » Записан
economist
Форумчанин
***
Online Online

Сообщений: 1 033


« Ответ #3: 28 Октябрь 2019, 08:19 »

До за пуска макроса, при протягивании мышью - ячейки суммируются в строке состояния?
 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #4: 28 Октябрь 2019, 08:29 »

да
и нормально всё вычисляется
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 545


« Ответ #5: 28 Октябрь 2019, 08:50 »

Приложите пример (ODS) таблицы с макросом для тестирования.
Записан

С уважением,
Михаил Каганский
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #6: 28 Октябрь 2019, 09:22 »

Файл приложил:
в столбцах J:N
значения с апострофом
но тоже странно:
в ячейке J3 значение как число а уже с ячейки J4 и далее идёт с апострофом.
Неоднородно как-то

* Форма_заказа-ТЕСТ.ods (1380.57 Кб - загружено 3 раз.)
« Последнее редактирование: 28 Октябрь 2019, 09:25 от Konstanta » Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 545


« Ответ #7: 28 Октябрь 2019, 09:27 »

И какой из макросов должен где отработать? Пожалуйста, учитывайте, что покрытие телепатией ещё не тотальное Подмигивающий
Записан

С уважением,
Михаил Каганский
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #8: 28 Октябрь 2019, 09:36 »

Улыбка

Sub Формулы_Общий разбит на этапы:
1. заполняет строку 3 формулами;
2. закомментирован как "Очистить_Общий Макрос" очищает от содержимого все поля для последующего копирования.
3. 4 закомментированы как " Индекс1 Макрос"  "Индекс2 Макрос" выполняют копирование строки с формулами до конца таблицы

5.  "Значения1 Макрос" копирует диапазоны ячеек и вставляет их как значения.
вот собственно он и выдаёт апострофы в ячейках
 
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 545


« Ответ #9: 28 Октябрь 2019, 09:50 »

У меня на 6.3.3.2 всё отрабатывает, и после завершения макроса везде в диапазоне J3:N49 нули в виде нормальных чисел.

Постарайтесь сделать пример, в котором не будет лишнего, и в котором будет только пара строк и столбцов с готовыми формулами, а единственный макрос будет только копировать и вставлять, и после этого можно будет наблюдать проблему в этих нескольких ячейках.
Записан

С уважением,
Михаил Каганский
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #10: 28 Октябрь 2019, 10:03 »

Я тогда понял в чём проблема
Если у Вас нули в виде чисел и нормально работают, значит у меня в обновляемых связях подтянуты данные как текст.
Я у себя исправлю формулы чтобы выдавали значения "=значен" и проверю.
Спасибо за мысль!
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 545


« Ответ #11: 28 Октябрь 2019, 10:24 »

А вообще формулы слишком громоздкие (даже не принимая в расчёт, что Вы продолжаете использовать VBA с FormulaR1C1, когда известно, что FormulaR1C1 имеет баг с неправильным использованием ";" вместо ",", что будет исправлено рано или поздно, и Вам придётся всё переделывать).

Например,
Код:
ActiveCell.FormulaR1C1 = _
        "=INDEX('Мат ведомость'!C1:C22;MATCH(RC1;'Мат ведомость'!C1;0);R1C)"

в результате INDEX работает с диапазоном из 22 столбцов, и возвращает одну ячейку из выбранной строки и фиксированного столбца - вместо изначальной передачи туда диапазона с одним столбцом:

Код:
ActiveCell.FormulaR1C1 = _
        "=INDEX('Мат ведомость'!C" & Range("H1").Value & ";MATCH(RC1;'Мат ведомость'!C1;0))"

Не смотрел в подробности реализации INDEX, но может быть значительное ускорение.
Ну, и уж конечно не говоря о том, что эта конструкция проще реализуется с помощью VLOOKUP:

Код:
ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1;'Мат ведомость'!C1:C" & Range("H1").Value & ";" & Range("H1").Value & ";0)"
Записан

С уважением,
Михаил Каганский
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #12: 28 Октябрь 2019, 10:57 »

mikekaganski задача решена, с Вашей помощью!
Действительно, у меня подтянуты были значения в текстовом формате из связи.
Принимая во внимание, что эти же данные (как текст) будут и в будущем выгружаться, я просто применил "= значен" к вычислению. 
Совместив это с предложенной Вами ВПР (она же VLOOKUP)  получил в итоге=

ActiveCell.FormulaR1C1 = _
        "=VALUE(VLOOKUP(RC1;'Мат ведомость'!C1:C" & Range("J1").Value & ";" & Range("J1").Value & ";0))"
И в результате все данные как числа.
ещё раз Спасибо!
задача решена!
Записан
economist
Форумчанин
***
Online Online

Сообщений: 1 033


« Ответ #13: 28 Октябрь 2019, 13:43 »

у меня подтянуты были значения в текстовом формате из связи.
Задача была бы решена быстрее, если бы вы честно и правильно ответили на два моих вопроса о автосуммировании ячеек в строке состояния (при выделении и протягивании их мышью). Т.к. там были не-числа, вы не обратили внимание что при расширении выделения - какие-то ячейки с "числами" не увеличивали сумму.

Теперь по существу внезапного появления смеси "числа-текст" в Calc и Excel и их связи с "форматом ячейки". Я сам грешу VBA в Calc, и согласен со старшими товарищами что это нехорошо и требует проверок и осторожности. Экселевские привычки надо искоренять. Excel чудит почище чем Calc, он сам тайком меняет формат ячейки с Общий на Текстовый, если изменили формат ячейки-источника на Текстовый. Calc же хранит формат "до последнего" и сам его на Текстовый с числового, даты итд - не меняет. Если внешние файлы проходили через Excel - лучше всё делать через функции =ЗНАЧЕН/VALUE, если ожидается число.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #14: 28 Октябрь 2019, 14:20 »

Задача была бы решена быстрее, если бы вы честно и правильно ответили на два моих вопроса о автосуммировании ячеек в строке состояния (при выделении и протягивании их мышью). Т.к. там были не-числа, вы не обратили внимание что при расширении выделения - какие-то ячейки с "числами" не увеличивали сумму.
Дело в том, что по "экселевской привычке" я смотрел не в строку состояния, а в результат вычислений.
То есть пока в ячейках были формулы, то и и в итоговой формуле, ссылающейся на данный диапазон, были верные результаты вычислений.
А вот когда были вставлены значения, итоговая формула выдала "знач"
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!