VBA Струнная санитария - PullRequest
       21

VBA Струнная санитария

3 голосов
/ 06 февраля 2009

Я получаю данные, импортированные из базы данных Oracle, и использую Excel для создания некоторых отчетов из этого. Недавно один из наших сотрудников по вводу данных начал свои записи с "+". Excel затем оценивает это и добавляет =, а затем отображает ужасную? Name # error. Ошибка 2029.

Я пытался использовать

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

Но это никуда меня не приведет.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2009

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

ActiveSheet.Cells.Replace What:="=+", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
1 голос
/ 07 февраля 2009

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

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

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

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


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

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

0 голосов
/ 09 февраля 2009

Просто еще одна вещь, это должно быть:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...