Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Run-time error 1004 WorkDay класс - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Run-time error 1004 WorkDay класс (Макросы/Sub)
Run-time error 1004 WorkDay класс
supercelt Дата: Пятница, 27.07.2018, 14:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells As Range

    Set KeyCells = Range("B12:NC26")

    Dim p, a As Integer

    Dim date_row, begin_work_col, end_work_col, start_row, stop_row, start_col, stop_col, begin_work As Integer

    Dim before_work() As Integer
    
    Dim next_work_day As Variant

    p = 0
    date_row = 4
    start_row = 12
    stop_row = 26
    start_col = 3
    stop_col = 367
    begin_work_col = 371
    end_work_col = 372
    expl_work_col = 373
    begin_work = 0
    ReDim before_work(stop_row) As Integer
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
            For a = start_row To stop_row
                If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(a, 2))) <> 0 Then
                    before_work(a) = 1
                Else
                    before_work(a) = 0
                End If
            Next a
            
            For i = start_row To stop_row
                For j = start_col To stop_col
                    If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, j))) <> 0 Then 'j-êîëîíêè, i-ðÿäû (åñëè ÿ÷åéêà íå ïóñòàÿ)
                        If begin_work = 1 Then
                            Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                            next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                            Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                        Else
                            If before_work(i) = 1 Then
                    begin_work = 1
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                            Else
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                    begin_work = 1
                            End If
                        End If
                    End If
                Next j
                If begin_work = 0 Then
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = ""
                    If before_work(i) <> 1 Then
                        Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = ""
                    End If
                End If
                begin_work = 0
            Next i
    End If
End Sub
[/vba]

Выдаёт ошибку как на скрине. Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх

ПС Не знаю почему, в редакторе всё отображается нормально, а когда сохраняю, в коде каша без перевода строк, хотя символы CR LF есть на каждой строке
К сообщению приложен файл: 9710040.png (16.6 Kb)


Сообщение отредактировал supercelt - Пятница, 27.07.2018, 14:13
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells As Range

    Set KeyCells = Range("B12:NC26")

    Dim p, a As Integer

    Dim date_row, begin_work_col, end_work_col, start_row, stop_row, start_col, stop_col, begin_work As Integer

    Dim before_work() As Integer
    
    Dim next_work_day As Variant

    p = 0
    date_row = 4
    start_row = 12
    stop_row = 26
    start_col = 3
    stop_col = 367
    begin_work_col = 371
    end_work_col = 372
    expl_work_col = 373
    begin_work = 0
    ReDim before_work(stop_row) As Integer
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
            For a = start_row To stop_row
                If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(a, 2))) <> 0 Then
                    before_work(a) = 1
                Else
                    before_work(a) = 0
                End If
            Next a
            
            For i = start_row To stop_row
                For j = start_col To stop_col
                    If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, j))) <> 0 Then 'j-êîëîíêè, i-ðÿäû (åñëè ÿ÷åéêà íå ïóñòàÿ)
                        If begin_work = 1 Then
                            Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                            next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                            Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                        Else
                            If before_work(i) = 1 Then
                    begin_work = 1
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                            Else
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j)
                    next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day
                    begin_work = 1
                            End If
                        End If
                    End If
                Next j
                If begin_work = 0 Then
                    Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = ""
                    If before_work(i) <> 1 Then
                        Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = ""
                    End If
                End If
                begin_work = 0
            Next i
    End If
End Sub
[/vba]

Выдаёт ошибку как на скрине. Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх

ПС Не знаю почему, в редакторе всё отображается нормально, а когда сохраняю, в коде каша без перевода строк, хотя символы CR LF есть на каждой строке

Автор - supercelt
Дата добавления - 27.07.2018 в 14:07
Pelena Дата: Пятница, 27.07.2018, 14:32 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Приложите файл с проблемными строками, а не картинку. Думаю, что даты сохранены как текст.

Для оформления кода следует использовать кнопку # на панели инструментов при оформлении сообщения


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПриложите файл с проблемными строками, а не картинку. Думаю, что даты сохранены как текст.

Для оформления кода следует использовать кнопку # на панели инструментов при оформлении сообщения

Автор - Pelena
Дата добавления - 27.07.2018 в 14:32
supercelt Дата: Пятница, 27.07.2018, 14:53 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Даты сохранены как даты в томто всё и дело. Резал файл как только мог, всё-равно меньше 300кб не получается(
 
Ответить
СообщениеДаты сохранены как даты в томто всё и дело. Резал файл как только мог, всё-равно меньше 300кб не получается(

Автор - supercelt
Дата добавления - 27.07.2018 в 14:53
doober Дата: Пятница, 27.07.2018, 16:08 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
= Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
Откуда столько параметров в функции?


 
Ответить
Сообщение
= Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29"))
Откуда столько параметров в функции?

Автор - doober
Дата добавления - 27.07.2018 в 16:08
_Boroda_ Дата: Пятница, 27.07.2018, 16:16 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Все нормально, так и должно быть
РАБДЕНЬ(нач_дата;количество_дней;[праздники])
А вот из этого
Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх
вовсе не следует, что
Даты сохранены как даты

supercelt, попробуйте перед каждой "датой" написать CDate. Примерно вот так
[vba]
Код
= Application.WorksheetFunction.WorkDay(cdate(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, cdate(Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")))
[/vba]

А от здесь
Резал файл как только мог, всё-равно меньше 300кб не получается
Вы явно что-то не то делаете. Уберите лишние листы, уменьшите диапазоны, сохраните в xlsb, заархивируйте


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВсе нормально, так и должно быть
РАБДЕНЬ(нач_дата;количество_дней;[праздники])
А вот из этого
Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх
вовсе не следует, что
Даты сохранены как даты

supercelt, попробуйте перед каждой "датой" написать CDate. Примерно вот так
[vba]
Код
= Application.WorksheetFunction.WorkDay(cdate(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, cdate(Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")))
[/vba]

А от здесь
Резал файл как только мог, всё-равно меньше 300кб не получается
Вы явно что-то не то делаете. Уберите лишние листы, уменьшите диапазоны, сохраните в xlsb, заархивируйте

Автор - _Boroda_
Дата добавления - 27.07.2018 в 16:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Run-time error 1004 WorkDay класс (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!