Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 13:53   #1
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
Вопрос Чем вызвана ошибка OVERFLOW?

Добрый день!

В столбце "B" записаны даты в текстовом формате.
Пример: 06/15/2008
Всего 174988 записей начаная с ячейки "B2" до ячейки "B174989".

Хочу перевернуть в формат дат в такой вид: 15.06.2008

Делал так:
Код:
Sub Замена_дат()
Application.ScreenUpdating = False
Columns("B:B").NumberFormat = "m/d/yyyy"
Dim x, y, i, j As Integer
Dim s, s1, s2, s3 As String
x = Cells(2, 2).Row
y = Cells(Cells(Rows.Count, "B").End(xlUp).Row, "B").Row
i = y - x
Cells(2, 2).Select
For j = 0 To i
s = ActiveCell.Offset(j, 0).Value
s1 = Mid(s, 1, 2)
s2 = Mid(s, 4, 2)
s3 = Mid(s, 7, 4)
ActiveCell.Offset(j, 0).FormulaR1C1 = "=" & s2 & "." & s1 & "." & s3 & ""
Next j
End Sub
Делал так:
Код:
Sub Замена_дат2()
Application.ScreenUpdating = False
Columns("B:B").NumberFormat = "m/d/yyyy"
Dim y, j As Integer
Dim s, s1, s2, s3 As String
y = Cells(Cells(Rows.Count, "B").End(xlUp).Row, "B").Row
For j = 2 To y
s = Cells(j, 2).Value
s1 = Mid(s, 1, 2)
s2 = Mid(s, 4, 2)
s3 = Mid(s, 7, 4)
Cells(j, 2).FormulaR1C1 = "=" & s2 & "." & s1 & "." & s3 & ""
Next j
End Sub
Понимаю, что разницы никакой. В обоих случаях: Run-time error 6. Overflow.
Maxx вне форума Ответить с цитированием
Старый 27.08.2009, 15:19   #2
istoe
Пользователь
 
Регистрация: 12.07.2009
Сообщений: 17
По умолчанию

Не хватает диапазона типа integer
замените на long
istoe вне форума Ответить с цитированием
Старый 27.08.2009, 15:35   #3
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Да, с диапазоном стало все ОК! Спасибо!

Но теперь вылезает другая ошибка на строке:

Код:
ActiveCell.Offset(j, 0).FormulaR1C1 = "=" & s2 & "." & s1 & "." & s3 & ""
или

Код:
Cells(j, 2).FormulaR1C1 = "=" & s2 & "." & s1 & "." & s3 & ""
"Run-time error 1004". Application-defined or object-defined error"

В чем опять беда?
Где смотреть описание ошибок?
Maxx вне форума Ответить с цитированием
Старый 27.08.2009, 15:43   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Cells(j, 2).FormulaR1C1 = "=" & s2 & "." & s1 & "." & s3 & ""
А что Вы пытаетесь поместить в ячейку?
Формулу, или значение (дату в новом формате)?

Вот весь Ваш макрос:
Код:
Sub test()
    [b:b].Value = [b:b].Value
End Sub

Последний раз редактировалось EducatedFool; 27.08.2009 в 15:49.
EducatedFool вне форума Ответить с цитированием
Старый 27.08.2009, 15:44   #5
istoe
Пользователь
 
Регистрация: 12.07.2009
Сообщений: 17
По умолчанию

Смотреть всегда полезно

в formulaR1C1 не надо писать "="
Код:
Cells(j, 2).FormulaR1C1 = s2 & "." & s1 & "." & s3 & ""
istoe вне форума Ответить с цитированием
Старый 27.08.2009, 15:47   #6
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

istoe, EducatedFool Спасибо!

Невнимательность

Понял свою ошибку, исправил, РАБОТАЕТ!

А можно еще вопрос?
Я получил что хотел, но даты теперь в ячейках как числа, а не как даты.

Т.е. если, например, попытаться протянуть 15.06.2008, то получается не 16.06.2008 17.06.2008 и т.д., а 15.06.2000 15.06.2001

Что можно сделать?

Последний раз редактировалось Maxx; 27.08.2009 в 15:51.
Maxx вне форума Ответить с цитированием
Старый 27.08.2009, 16:02   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Я получил что хотел, но даты теперь в ячейках как числа, а не как даты.
Повторюсь: попробуйте простейший макрос
Код:
Sub test()
    [b:b].Value = [b:b].Value
End Sub
И даты преобразуются в нужный вид, и формат ячеек станет "дата", и "протягивание" ячейки даст 16.06.2008 17.06.2008 и т.д.
EducatedFool вне форума Ответить с цитированием
Старый 27.08.2009, 16:17   #8
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Понял!

Этого можно также добиться, нажимая на каждой ячейке F2, затем Enter. Но у меня 174989 строк.

Сделал, не работает!

Последний раз редактировалось Maxx; 27.08.2009 в 16:21.
Maxx вне форума Ответить с цитированием
Старый 27.08.2009, 16:32   #9
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Ура! Догадался с помощью макрорекодера.

Надо было писать так:

Код:
Cells(j, 2).FormulaR1C1 = s1 & "/" & s2 & "/" & s3 & ""
т.е. оставить месяц на первом месте, затем день и год, а вместо точки поставить /

Maxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в чем ошибка Arassir Помощь студентам 3 01.04.2009 21:51
При переключении между чекбоксами - ошибка Stack overflow. Как исправить эту ошибку? SkAndrew Общие вопросы Delphi 5 26.08.2008 21:32
В чем ошибка!!! juden Общие вопросы Delphi 12 10.03.2008 08:53
в чем ошибка? Lonix Общие вопросы Delphi 2 24.03.2007 09:41
чем может быть вызвана эта ошибка doncova1 Общие вопросы Delphi 5 01.03.2007 11:15