Excel VBA, ошибка переполнения - PullRequest
0 голосов
/ 13 июня 2011

Я использую VBA в моем листе Excel, и это дает мне ошибку переполнения.Когда я проверил, я обнаружил, что это связано с ошибкой данных, которая показывает незапятнанный символ "#" в одной ячейке.

Все значения в каждой ячейке присваиваются строковой переменной, и когда эта ячейка входит, генерирует переполнениеошибка.Я попытался проверить это с помощью условия if, но всякий раз, когда мы проверяем cell.value, это вызывает ошибку переполнения.Есть ли способ исправить это?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

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

s = Range("C2").Text
Debug.Print s
' returns: "###########"

Если вы действительно хотите прочитать значение ячейки, а не текст ячейки (зачем вам это нужно, я понятия не имею, поскольку вы в любом случае вставляете его в строку), то это обходной путь, предполагая, что # ### вызваны датами 1 января, 10000 г. н.э. или позже.

Const MaxDateSerial As Double = 2958466
Dim s As String
Dim dbl As Double
Dim nf As Variant

' Save original number format
nf = Range("C2").NumberFormat

' Use read-safe number format to read cell content
Range("C2").NumberFormat = "General"
dbl = Range("C2").Value

' Restore original number format
Range("C2").NumberFormat = nf

If dbl < MaxDateSerial Then
    s = Range("C2").Value
Else
    s = "Date overflow!"
End If
1 голос
/ 13 июня 2011

Если вы делаете что-то вроде

Dim s as string
Dim cl as Range
...
s = cl
' or
s = cl.value

s будет установлено в значение, отображаемое на листе, , которое включает ошибку
(в форме "Error <Error Code>", если это то, что отображается на листе

Если базовая ячейка значение является действительной, вы должны иметь доступ к ней при использовании cl.value2

Если вы делаете что-то вроде

Dim v as Variant
Dim s as string
Dim r as Range
...
Set r = <SomeRange>
v = r
...

И одна или несколько ячеек в диапазоне r являются ошибкой, тогда Runtime Error 6 Overflow произойдет

Для получения дополнительной информации, пожалуйста, опишите подробности кода, где происходит ошибка, значение ячейки и форматирование ячейки

Отображение ############### для дат происходит, если серийный номер даты до 1 января 1900 года (отрицательный) или после 1 января 1999 года (> 2958101) РЕДАКТИРОВАТЬ на самом деле 31/12/9999 = 2958465

0 голосов
/ 13 июня 2011

Попробуйте использовать функцию "ISERROR ()", чтобы отфильтровать недопустимые значения.

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