2009-02-06 3 views
3

Я получаю данные, импортированные из базы данных Oracle, и использую Excel для создания некоторых отчетов. Недавно один из наших пользователей ввода данных начал вводить свои записи с помощью «+». Excel, чем оценивает это, а add = then отображает ошибку с ошибкой? Name #. Ошибка Ошибка 2029.VBA String sanitation

Я попытался с помощью

If IsError(C.Value) Then 
    C.Value = Replace(C.Value, "=+", "", 1, -1, vbTextCompare) 
End If 

Но это не получает меня в любом месте.

Любые предложения?

ответ

1

Если у вас есть данные в тексте/файл CSV, то вы можете попробовать: Data > Import External Data > Import Data Это запускает мастер, который позволяет указать конкретные столбцы в виде текста и причины символы, подобные +, - и т. д. не обрабатываются Excel

В VBA это можно сделать с помощью метода Worksheet("foo").QueryTables.Add. Существует немало опций, но свойство TextFileColumnDataTypes позволяет указать, какие столбцы обрабатывать как текст. Возможно, было бы легче определить, что происходит, записав макрос используемого мастера и затем отредактировав его в соответствии с

Если вы читаете данные более напрямую (например, через ADO или DAO), просто убедитесь, что ячейка назначения находится в текстовом формате, прежде чем данные будут добавлены

Worksheet("foo").Cells(r, c).NumberFormat = "@"


NB в исходном растворе, вы почти наверняка хотел посмотреть на C.Formula, а не C.Value Если клетка C имела формулу =123+456 то C.Value будет 579, где а C.Formula бы =123+456

+1 на использовании встроенного Replace метода в этом контексте

+0

Спасибо, barrowc, ваш окончательный ответ превратил трюк, я забыл о том, чтобы посмотреть на .formula, а не на .value – CABecker

2

Excel имеет собственную заменить функцию:

ActiveSheet.Cells.Replace What:="=+", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
+0

Когда я запускаю этот Я получаю ошибку времени выполнения «438» obeject dosen »t поддерживает это свойство или meth od – CABecker

+0

oops - повторите попытку с помощью «Ячейки», которая возвращает объект диапазона всех ячеек на листе –

0

Только одна вещь, тоже, должно быть:

If IsError(C.Value) Then 
    C.Value = Replace(C.Formula, "=+", "", 1, -1, vbTextCompare) 
End If 

Это происходит потому, что = + является сохраненный в свойстве формулы, а не значение ... Вы можете назначить замену (...) на C.Value или C.Formula, если вы не хотите делать очистку самостоятельно в VBA