2013-03-19 2 views
1

У меня есть электронная таблица, которая заполняется отдельным приложением со строками, которые являются числами (например, «654», «0,005»). Excel не может выполнять вычисления по строкам. Поскольку моя электронная таблица обновляется (строки добавляются) каждые несколько минут, я бы хотел написать сценарий, который автоматически преобразует ячейки в диапазон в числа.Автоматическое преобразование текста в номер в таблицу обновления

Вот мое решение, где convertRange это диапазон, который содержит строки, которые будут преобразованы в числа:

method OnChangeInSpreadsheet(): 
if changedCell is NOT in convertRange 
    currentHeight = convertRange.height 
    expand convertRange to include new rows 
    convert the new rows' strings 

Причина это становится сложнее, потому что преобразование строки к числу вызовет функцию OnChangeInSpreadsheet, так Я должен быть осторожным, что новые строки добавляются за пределы convertRange. Может ли кто-нибудь подумать о другом решении?

Спасибо!

+8

При использовании обработчика событий для внесения изменений в лист, вы, как правило, использовать 'Application.EnableEvents = false' перед внесением любые изменения, чтобы не повторять запуск события. Вернитесь к «True», когда закончите! –

+0

Это меняет все, спасибо! –

ответ

0

В конце концов я использовал ASAP Utilities function, «Измените недознанные числа (текст?) На цифры». Я решил, что на самом деле мне не нужно преобразовывать текст в число при каждом обновлении, поэтому я запускаю функцию внутри метода OnWorkbookOpen.

Было бы легко запустить функцию ASAP Utilities только на измененных ячейках. Прежде чем отключить Application.EnableEvents и включите его, как кто-то так полезен в приведенных выше комментариях.

Спасибо всем за помощь!

1

Вы пытались умножить значения строк на 1, чтобы преобразовать их в числа? Несколько дней назад у меня была проблема, когда числа воспринимались как строки и не велись должным образом. Решение состояло в том, чтобы просто умножить их на 1.

Позвольте мне объяснить: я закодировал модуль в VBA, чтобы выполнить некоторые вычисления между числами, взятыми из рабочего листа excel. Результаты вычислений были помещены в массив, а затем «напечатаны» (как указано) как часть модифицированной формулы excel на другом листе. Проблема была в том, что десятичные знаки (например, 0,1234) не отображали свои «0» перед «.». в клетках. Вопрос состоял в том, что excel воспринимал их как строки, а не как номера. Даже когда я изменил свой формат с помощью excel GUI на номера, проблема осталась.

Примечание: много раз в программировании вы превращаете целое число в double/float, умножая его на double/float.

Имея это в виду I напечатал Результаты в ячейках умножены на 1 (as in "=function(...) * 1"), который работал.

+1

Это больше похоже на комментарий. Вы могли бы лучше сформулировать свой ответ с проблемой, с которой вы столкнулись, что не только человек здесь, но и любой, кто ищет аналогичную проблему. – Freakyuser

+0

Freakyuser Надеюсь, что объяснение имеет смысл. Если нет, пожалуйста, дайте мне знать. Когда дело доходит до математики, мой английский словарь очень ограничен. – pn7a

+0

Вам придется подождать, пока собеседник примет ответ, если он сочтет это полезным.Я только что просмотрел и отформатировал ваш ответ. Спасибо за обновление. – Freakyuser

0

Я просто нашел простой Methode для автоматического преобразования строк в любом необходимых:

Application.Transpose(Application.Transpose(arrStrData)) 
Смежные вопросы