powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка записи значиния в ячейку: type mismatch
8 сообщений из 8, страница 1 из 1
Ошибка записи значиния в ячейку: type mismatch
    #39392367
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, друзья.

Появилась необходимость обработать большую таблицу автоматически. Но возникает ошибка type mismatch на строке "Cells(nRowIndex, 11).Value = nExecutDay + 1".
Функция TypeName выдает Empty. Изменение типа не помогет (я делал это функциями CDate, CStr... Правильно?).
Аналогичных проблем на форуме и в интернете не нашел.
Прошу вашей помощи. За ссылки и разъяснения говорю спасибо.

Код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Option Explicit
Sub fGrafik()

    ' 11 колонка - дата окончания КЭП
    ' 14 колонка - последняя
    Dim nRowIndex As Long
    
    
    Dim nExecutDay, nMaxExecutDay As Date
    
    
    nExecutDay = "06.01.2017 00:00:00"
    
    For nRowIndex = 2 To Range("A65536").End(xlUp).Row
        'If IsError(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value) = True Then Stop
        Debug.Print nRowIndex
        Debug.Print TypeName(Cells(nRowIndex, 11).Value)
        If Cells(nRowIndex, 11).Value = 0 _
        Or Cells(nRowIndex, 11).Value = " " _
        Or Cells(nRowIndex, 11).Value = "" _
        Or Cells(nRowIndex, 11).Value = vbNullString _
        Or IsEmpty(Cells(nRowIndex, 11)) _
        Or nExecutDay > Cells(nRowIndex, 11).Value Then
            Cells(nRowIndex, 11).Value = nExecutDay + 1 ' тут ошибка
            'Debug.Print nRowIndex
        End If
        'If Cells(nRowIndex, 11).Value = 0 Or Cells(nRowIndex, 11).Value = " " Empty Then Cells(nRowIndex, 11).Value = nExecutDay + 1'Or Cells(nRowIndex, 11).Value Is Empty Then Cells(nRowIndex, 11).Value = nExecutDay + 1
        'If IsError(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value) = True Then Stop
    Next
    
End Sub
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392377
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка пропала когда я убрал "+1", т.е. строку
"Cells(nRowIndex, 11).Value = nExecutDay + 1"
заменил на
"Cells(nRowIndex, 11).Value = nExecutDay"

Однако в другом модуле набрал код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub fqwer()

   Dim nExecutDay As Date
   nExecutDay = "06.01.2017 00:00:00"
   Debug.Print nExecutDay
   nExecutDay = nExecutDay + 1
   Debug.Print nExecutDay
    
End Sub



Модератор: Учимся использовать тэги оформления кода - FAQ

и он работает....
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392385
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что будет, если к апельсинам прибавить смелость? ))
Ты пытаешься прибавить к строке число, вот и ошибка. К тому же неверно объявляешь переменные.
Код: vbnet
1.
2.
3.
4.
    Dim nExecutDay, nMaxExecutDay As Date
    
    
    nExecutDay = "06.01.2017 00:00:00"

исправь на:
Код: vbnet
1.
2.
3.
4.
    Dim nExecutDay As Date, nMaxExecutDay As Date
    
    
    nExecutDay = #1/6/2017#
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392540
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно.
Теперь пустые ячейки заполняются нужными значениями и числовой формат - дата. А заполненные ячейки по условию
Код: sql
1.
  nExecutDay > Cells(nRowIndex, 11).Value 


не перезаписываются. Тут тоже, как я понимаю, проблема "апельсин или смелость". Но устранить тоже не получилось:
- изменение формата через NumberFormat не помогает (остается типа String)
- ручное изменение числового формата тоже не спасло.
Новот что заметил: если после изменения числового формата кликнуть на ячейку, то формат меняется.
Т.е. мне нужно, как бы применить изменения. Пробовал пользоваться методом Calculate, но он не помог.
Подскажите, какой метод нужно задействовать?
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392543
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
nExecutDay > CDate(Cells(nRowIndex, 11).Value)

?
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392547
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код полностью:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Option Explicit
Sub fGrafik()

    ' 11 колонка - дата окончания КЭП
    ' 14 колонка - последняя
    Dim nRowIndex As Long
    
    
    Dim nExecutDay, nMaxExecutDay As Date
    
    
    nExecutDay = #1/6/2017# 
    
    For nRowIndex = 2 To Range("A65536").End(xlUp).Row
        'If IsError(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value) = True Then Stop
        Debug.Print nRowIndex
        Cells(nRowIndex, 11).NumberFormat = "dd.mm.yyyy hh:mm" ' меняем числовой формат, но он по факту не меняется.
        Debug.Print TypeName(Cells(nRowIndex, 11).Value)
        If Cells(nRowIndex, 11).Value = 0 _
        Or Cells(nRowIndex, 11).Value = " " _
        Or Cells(nRowIndex, 11).Value = "" _
        Or Cells(nRowIndex, 11).Value = vbNullString _
        Or IsEmpty(Cells(nRowIndex, 11)) _
        Or nExecutDay > Cells(nRowIndex, 11).Value Then ' если дата в переменной больше значения ячейки то
            Cells(nRowIndex, 11).Value = nExecutDay + 1   ' должно перезаписываться
            'Debug.Print nRowIndex
        End If
        Debug.Print TypeName(Cells(5, 11).Value)
        Debug.Print TypeName(Cells(515, 11).Value)
        'If Cells(nRowIndex, 11).Value = 0 Or Cells(nRowIndex, 11).Value = " " Empty Then Cells(nRowIndex, 11).Value = nExecutDay + 1'Or Cells(nRowIndex, 11).Value Is Empty Then Cells(nRowIndex, 11).Value = nExecutDay + 1
        'If IsError(ActiveWorkbook.ActiveSheet.Cells(1, 2).Value) = True Then Stop
    Next
    
End Sub



Предполагаю, что проблема в числовом формате ячейки. Но он не меняется.
Это я выяснил при помощи другого кода:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub qweqwert()
    'ThisWorkbook.Worksheets(1).Calculate
    Debug.Print TypeName(Cells(28, 11).Value)    ' результат вывода string
    Cells(28, 11).NumberFormat = "dd.mm.yyyy"
    Debug.Print TypeName(Cells(28, 11).Value)    ' результат вывода string
    Cells(28, 11).Calculate
    Debug.Print TypeName(Cells(28, 11).Value)    ' результат вывода string
End Sub



Результат всегда один: string
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392559
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что в ячейках лежит текст или текстовая формула, а не дата, потому я и предложил использовать преобразование CDate (если не стоит цели, чтобы в ячейках файла была именно дата)

Используй правильные тэги для оформления кода, мне скоро надоест их исправлять
...
Рейтинг: 0 / 0
Ошибка записи значиния в ячейку: type mismatch
    #39392564
Rostislavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправил. Спасибо большое за помощь.

Результат:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub fGrafik()

    Dim nRowIndex As Long
    Dim nExecutDay As Date
    nExecutDay = #1/6/2017#
    For nRowIndex = 2 To Range("A65536").End(xlUp).Row
        
        Cells(nRowIndex, 11).NumberFormat = "dd.mm.yyyy"
        Cells(nRowIndex, 11).Value = CDate(Cells(nRowIndex, 11).Value)
        
        If Cells(nRowIndex, 11).Value = 0 _
        Or Cells(nRowIndex, 11).Value = " " _
        Or Cells(nRowIndex, 11).Value = "" _
        Or Cells(nRowIndex, 11).Value = vbNullString _
        Or IsEmpty(Cells(nRowIndex, 11)) _
        Or nExecutDay > Cells(nRowIndex, 11).Value Then
            Cells(nRowIndex, 11).Value = nExecutDay + 1
            
        End If

    Next
    
End Sub
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ошибка записи значиния в ячейку: type mismatch
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]