Всем привет!
Друзья, подскажите.
Из 1С заполняю файл excel по шаблону. С некоторых пор при выгрузке валится ошибка VBA Несоответствие типов (ошибка 13).
Из кода 1С я только знаю, что вызываю запуск макроса, который называется FillData.
Макрос я открыл, но не могу теперь понять как мне понять, в какой строке ошибка валится, т.к. файл дальше не создается и я не знаю, на каком именно этапе ошибка. Можно ли как-то запускать отладку в VBA в еще не созданном файле?
Друзья, подскажите.
Из 1С заполняю файл excel по шаблону. С некоторых пор при выгрузке валится ошибка VBA Несоответствие типов (ошибка 13).
Из кода 1С я только знаю, что вызываю запуск макроса, который называется FillData.
Макрос я открыл, но не могу теперь понять как мне понять, в какой строке ошибка валится, т.к. файл дальше не создается и я не знаю, на каком именно этапе ошибка. Можно ли как-то запускать отладку в VBA в еще не созданном файле?
Код |
---|
Public Sub FillData() Set ЛистСПараметрами = Sheets("Параметры") Set ОсновнойЛист = Sheets("Основной") Set ЛистИсполнит = Sheets("Исполнит") Set ЛистПремия = Sheets("Премия") Set ЛистПечать1_15 = Sheets("Печать 1-15") Set ЛистПечать15_31 = Sheets("Печать 16-31") Set ЛистПечать = Sheets("Печать") ОсновнойЛист.EnableCalculation = False ЛистИсполнит.EnableCalculation = False ЛистПремия.EnableCalculation = False ЛистПечать1_15.EnableCalculation = False ЛистПечать15_31.EnableCalculation = False ЛистПечать.EnableCalculation = False ексНомерСтроки = "A17" ексФИОСотрудника = "B17" ексДолжностьСотрудника = "B19" ексТабельныйНомерСотрудника = "C17" ексВсегоЧасовНорма = "AQ17" ексПереработки = "BD17" ексНормаСНачалаГода = "BC17" ексФактСНачалаГода = "BA17" ексПервыйДеньМесяца = "BW17" ексПоследнийДеньМесяца = "BX17" ексКолонкаПервыйДеньМесяца = "BW" ексКолонкаПоследнийДеньМесяца = "BX" ексИспФИОСотрудника = "A17" ексИспДолжностьСотрудника = "A18" ексИспПодразделение = "A14" ексИспВсегоЧасовНорма = "AG17" ексПремияНомерСтроки = "A17" ексПремияФИОСотрудника = "B17" ексПремияДолжностьСотрудника = "D17" ексПремияТабельныйНомерСотрудника = "C17" ексПремияОкладСотрудника = "K17" ИмяФайлаДанных = ОсновнойЛист.Cells(1, 2) ОсновнойЛист.Cells(1, 2) = "" Open ИмяФайлаДанных For Input As #1 Dim КоличествоСтрок, НомерСтроки As Integer Dim КоличествоСтрок1_15, КоличествоСтрок15_31 As Integer ' Количество строк в табелях первой и второй половин месяца Input #1, КоличествоСтрок КоличествоСтрок1_15 = 0 КоличествоСтрок15_31 = 0 БлокировкаПервойПоловиныМесяца = ЛистСПараметрами.Cells(33, 3).Value = "Да" For i = 0 To КоличествоСтрок - 1 ЛистСПараметрами.Rows("1:4").Copy ОсновнойЛист.Rows("17:17").Insert (xlShiftDown) If БлокировкаПервойПоловиныМесяца Then ОсновнойЛист.Range(ОсновнойЛист.Cells(17, 4), ОсновнойЛист.Cells(20, 18)).Locked = True End If Input #1, НомерСтроки Input #1, Сотрудник Input #1, Должность Input #1, ТабельныйНомер Input #1, НормаСНачалаГода Input #1, ФактСНачалаГода Input #1, ПервыйДеньРаботы Input #1, ПоследнийДеньРаботы Input #1, МесячнаяНорма Input #1, Оклад ОсновнойЛист.Range(ексНомерСтроки).Value = НомерСтроки ОсновнойЛист.Range(ексФИОСотрудника).Value = Сотрудник ОсновнойЛист.Range(ексДолжностьСотрудника).Value = Должность ОсновнойЛист.Range(ексТабельныйНомерСотрудника).Value = ТабельныйНомер ОсновнойЛист.Range(ексНормаСНачалаГода).Value = НормаСНачалаГода ОсновнойЛист.Range(ексФактСНачалаГода).Value = ФактСНачалаГода ОсновнойЛист.Range(ексПервыйДеньМесяца).Value = ПервыйДеньРаботы ОсновнойЛист.Range(ексПоследнийДеньМесяца).Value = ПоследнийДеньРаботы ЛистИсполнит.Rows("17:18").Copy If i > 0 Then ЛистИсполнит.Rows("17:18").Insert (1) End If ЛистИсполнит.Range(ексИспФИОСотрудника).Value = Сотрудник ЛистИсполнит.Range(ексИспДолжностьСотрудника).Value = Должность ЛистИсполнит.Range(ексИспВсегоЧасовНорма).Value = МесячнаяНорма ЛистПремия.Rows("17:17").Copy If i > 0 Then ЛистПремия.Rows("17:17").Insert (1) End If ЛистПремия.Range(ексПремияНомерСтроки).Value = НомерСтроки ЛистПремия.Range(ексПремияФИОСотрудника).Value = Сотрудник ЛистПремия.Range(ексПремияДолжностьСотрудника).Value = Должность ЛистПремия.Range(ексПремияТабельныйНомерСотрудника).Value = ТабельныйНомер ЛистПремия.Range(ексПремияОкладСотрудника).Value = Оклад ЛистПремия.Cells(17, 13).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(17, 38).Address, "$", "") Input #1, ДнейВМесяце For День = 1 To 15 Input #1, ВидВремени If ВидВремени <> "нет" Then ОсновнойЛист.Cells(17, День + 3).Value = ВидВремени Input #1, РабочиеЧасы If РабочиеЧасы <> "НетРабочихЧасов" Then ЗначениеРабочихЧасов = CDec(Mid(РабочиеЧасы, 13)) ОсновнойЛист.Cells(18, День + 3).Value = ЗначениеРабочихЧасов ЛистИсполнит.Cells(17, День + 1).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(18, День + 3).Address, "$", "") ЛистПремия.Cells(17, 13).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(17, 38).Address, "$", "") Else ОсновнойЛист.Cells(18, День + 3).Value = "" ЛистИсполнит.Cells(17, День + 1).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(18, Ид + 3).Address, "$", "") ЛистПремия.Cells(17, 13).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(17, 38).Address, "$", "") End If Input #1, НочныеЧасы If НочныеЧасы <> "НетНочныхЧасов" Then ЗначениеНочныхЧасов = CDec(Mid(НочныеЧасы, 12)) ОсновнойЛист.Cells(19, День + 3).Value = "Н" ОсновнойЛист.Cells(20, День + 3).Value = ЗначениеНочныхЧасов Else ОсновнойЛист.Cells(19, День + 3).Value = "=""?""" End If End If Next For День = 16 To ДнейВМесяце Input #1, ВидВремени If ВидВремени <> "нет" Then ОсновнойЛист.Cells(17, День + 4).Value = ВидВремени Input #1, РабочиеЧасы If РабочиеЧасы <> "НетРабочихЧасов" Then ЗначениеРабочихЧасов = CDec(Mid(РабочиеЧасы, 13)) ОсновнойЛист.Cells(18, День + 4).Value = ЗначениеРабочихЧасов ЛистИсполнит.Cells(17, День + 1).Value = ЗначениеРабочихЧасов ЛистИсполнит.Cells(17, День + 1).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(18, День + 4).Address, "$", "") Else ОсновнойЛист.Cells(18, День + 4).Value = "" ЛистИсполнит.Cells(17, День + 1).Formula = "=Основной!" + Replace(ОсновнойЛист.Cells(18, День + 4).Address, "$", "") End If Input #1, НочныеЧасы If НочныеЧасы <> "НетНочныхЧасов" Then ЗначениеНочныхЧасов = CDec(Mid(НочныеЧасы, 12)) ОсновнойЛист.Cells(19, День + 4).Value = "Н" ОсновнойЛист.Cells(20, День + 4).Value = ЗначениеНочныхЧасов Else ОсновнойЛист.Cells(19, День + 4).Value = "=""?""" End If End If Next 'Расчет количества строк в табелях за 1ю и 2ю половины месяца If ПервыйДеньРаботы <= 15 Then КоличествоСтрок1_15 = КоличествоСтрок1_15 + 1 End If If ПоследнийДеньРаботы >= 16 Or ПоследнийДеньРаботы = 0 Then КоличествоСтрок15_31 = КоличествоСтрок15_31 + 1 End If Next ' Листы печати For i = 1 To КоличествоСтрок - 1 ЛистПечать.Rows("20:27").Copy ЛистПечать.Rows("20:27").Insert Next For i = 1 To КоличествоСтрок1_15 - 1 ЛистПечать1_15.Rows("20:27").Copy ЛистПечать1_15.Rows("20:27").Insert Next For i = 1 To КоличествоСтрок15_31 - 1 ЛистПечать15_31.Rows("20:27").Copy ЛистПечать15_31.Rows("20:27").Insert Next Call ВывестиТабельНаПечать(ЛистПечать, КоличествоСтрок, "", 0, ОсновнойЛист, ДнейВМесяце) Call ВывестиТабельНаПечать(ЛистПечать1_15, КоличествоСтрок, ексКолонкаПервыйДеньМесяца, 1, ОсновнойЛист, ДнейВМесяце) Call ВывестиТабельНаПечать(ЛистПечать15_31, КоличествоСтрок, ексКолонкаПоследнийДеньМесяца, 2, ОсновнойЛист, ДнейВМесяце) Close #1 ОсновнойЛист.EnableCalculation = True ЛистИсполнит.EnableCalculation = True ЛистПремия.EnableCalculation = True ЛистПечать1_15.EnableCalculation = True ЛистПечать15_31.EnableCalculation = True ЛистПечать.EnableCalculation = True 'На всякий случай еще раз пересчет ОсновнойЛист.Range("AQ:BE").Dirty ОсновнойЛист.Calculate End Sub |