Добрый день, не получается найти ошибку почему перестают работать напоминания если в строке большой список номеров телефонов, программа выдает ошибку "Run-time error '1004': Method 'OnTime' of object ^Application' failed" когда закрепляешь задачу на напоминания нажимая кнопку в верху таблицы. Макрос выдает ошибку если в ячейки много информации, как можно убрать данную ошибку?
[vba]
Код
Код Макроса: Option Explicit
Sub tt() Dim c As Range, t$
For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") Application.OnTime c, "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & c.Offset(, -3) & """,""" & t & "'" End If Next MsgBox "Задачи поставлены!" End Sub
Sub Задача(s1 As Date, s2$, s3$, s4$) MsgBox "[" & "]" & s1 & "Напоминание: " & s2 & " в " & s4 & s3 End Sub
Добрый день, не получается найти ошибку почему перестают работать напоминания если в строке большой список номеров телефонов, программа выдает ошибку "Run-time error '1004': Method 'OnTime' of object ^Application' failed" когда закрепляешь задачу на напоминания нажимая кнопку в верху таблицы. Макрос выдает ошибку если в ячейки много информации, как можно убрать данную ошибку?
[vba]
Код
Код Макроса: Option Explicit
Sub tt() Dim c As Range, t$
For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") Application.OnTime c, "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & c.Offset(, -3) & """,""" & t & "'" End If Next MsgBox "Задачи поставлены!" End Sub
Sub Задача(s1 As Date, s2$, s3$, s4$) MsgBox "[" & "]" & s1 & "Напоминание: " & s2 & " в " & s4 & s3 End Sub
Проверил документ там менее 255 символов, есть файл вложения посмотрите пожалуйста, для специалиста в коде VBA это будет пустяковой задачей, а я уже второй день над ней голову ломаю
Проверил документ там менее 255 символов, есть файл вложения посмотрите пожалуйста, для специалиста в коде VBA это будет пустяковой задачей, а я уже второй день над ней голову ломаю Sacredcom
[/vba] Вот так попробуйте обрезает телефоны так, чтобы в итоге получилось 255 или меньше символов [vba]
Код
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_) Application.OnTime c, "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & x2_ & """,""" & t & "'" End If Next MsgBox "Задачи поставлены!" End Sub
[/vba] Вот так попробуйте обрезает телефоны так, чтобы в итоге получилось 255 или меньше символов [vba]
Код
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_) Application.OnTime c, "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & x2_ & """,""" & t & "'" End If Next MsgBox "Задачи поставлены!" End Sub
Не совсем так. Не документ, а Excel. OnTime метод для Application Но Вам же по-любому не нужна запущенная задача при закрытом Excel? Поэтому можно на открытие Excel (вернее, на открытие файла Персонал) повесить автооткрытие этого файла с автозапуском макроса простановки задач и закрытия файла. Другими словами: закрыли Excel - задачи Вам все равно уже не нужны, открыли Excel - задачи проставились заново
** Если так пойдет, то это уже другая тема
Не совсем так. Не документ, а Excel. OnTime метод для Application Но Вам же по-любому не нужна запущенная задача при закрытом Excel? Поэтому можно на открытие Excel (вернее, на открытие файла Персонал) повесить автооткрытие этого файла с автозапуском макроса простановки задач и закрытия файла. Другими словами: закрыли Excel - задачи Вам все равно уже не нужны, открыли Excel - задачи проставились заново
** Если так пойдет, то это уже другая тема_Boroda_
_Boroda_, подскажите как можно реализовать поиск чтобы он сразу из напоминания макрос взял название фирмы и перешёл в указанную ячейку? Либо я окошечке напоминания была кнопка например с названием перейти, нажав на нее, курсор сразу устанавливается на ячейку фирмы которую он показал в напоминании
_Boroda_, подскажите как можно реализовать поиск чтобы он сразу из напоминания макрос взял название фирмы и перешёл в указанную ячейку? Либо я окошечке напоминания была кнопка например с названием перейти, нажав на нее, курсор сразу устанавливается на ячейку фирмы которую он показал в напоминанииSacredcom
Сообщение отредактировал Sacredcom - Суббота, 06.04.2019, 14:57
Вот это хорошая мысль, искать не нужно будет [vba]
Код
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_ - 7) uu = "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & x2_ & """,""" & t & """,""" & c.Address(0, 0) & "'" Application.OnTime c, uu End If Next MsgBox "Задачи поставлены!" End Sub
Sub Задача(s1 As Date, s2$, s3$, s4$, s5$) MsgBox "[" & "]" & s1 & "Напоминание: " & s2 & " в " & s4 & s3 Application.Goto reference:=Range(s5).Offset(, -8), scroll:=True End Sub
[/vba]
Вот это хорошая мысль, искать не нужно будет [vba]
Код
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In [I1:I2000] If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_ - 7) uu = "'Задача """ & TimeValue(c) & """,""" & c.Offset(, 1) & """,""" & x2_ & """,""" & t & """,""" & c.Address(0, 0) & "'" Application.OnTime c, uu End If Next MsgBox "Задачи поставлены!" End Sub
Sub Задача(s1 As Date, s2$, s3$, s4$, s5$) MsgBox "[" & "]" & s1 & "Напоминание: " & s2 & " в " & s4 & s3 Application.Goto reference:=Range(s5).Offset(, -8), scroll:=True End Sub
Оно не пропущено, оно принципиально не написано. Я не объявляю переменные без необходимости (с моей точки зрения). В большинстве случаев это ничего не дает, кроме лишнего геморроя. Вы спросите, а почему же тогда в первом макросе объявил? Да потому, что там у Вас была обязаловка
И да, я неоднократно писал на форуме, что это только мое решение и я никого не призываю ему следовать, тем более, что это против общепринятых правил написания кода
Оно не пропущено, оно принципиально не написано. Я не объявляю переменные без необходимости (с моей точки зрения). В большинстве случаев это ничего не дает, кроме лишнего геморроя. Вы спросите, а почему же тогда в первом макросе объявил? Да потому, что там у Вас была обязаловка
И да, я неоднократно писал на форуме, что это только мое решение и я никого не призываю ему следовать, тем более, что это против общепринятых правил написания кода_Boroda_
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In Cells(2, 9).Resize(Cells(Rows.Count, 9).End(3).Row - 1) If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""Звонок"",""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_ - 7) uu = "'Задача """ & TimeValue(c) & """,""Звонок"",""" & x2_ & """,""" & t & """,""" & c.Address(0, 0) & "'" Application.OnTime c, uu End If Next MsgBox "Задачи поставлены!" End Sub
[/vba]
А что просто не написать текстом "Звонок"? [vba]
Код
Sub tt() Dim c As Range, t$, x1_, x2_ For Each c In Cells(2, 9).Resize(Cells(Rows.Count, 9).End(3).Row - 1) If c > Now Then t = Replace(c.Offset(, -8), """", """""") x1_ = Len("'Задача """ & TimeValue(c) & """,""Звонок"",""" & """,""" & t & "'") x2_ = Left(c.Offset(, -3), 255 - x1_ - 7) uu = "'Задача """ & TimeValue(c) & """,""Звонок"",""" & x2_ & """,""" & t & """,""" & c.Address(0, 0) & "'" Application.OnTime c, uu End If Next MsgBox "Задачи поставлены!" End Sub