есть процедура (макрос, программа) копирует диапазоны при некоторых условиях
[vba]
Код
' ïðîãðàììà ñäâèãà äèàïàçîíîâ ñ äàííûìè ñîãëàñíî òåêóùåé äàòå Sub Moving() ' ' 1. ÏÎÈÑÊ ËÈÑÒÀ Ñ ÐÀÑÏÈÑÀÍÈÅÌ ' ×òîáû îòâÿçàòüñÿ îò èìåíè ëèñòà (ïîëüçîâàòåëü ìîæåò åãî ïåðåèìåíîâàòü ïî ñîáñòâåííîìó óñìîòðåíèþ) ' äåëàåì ïðèâÿçêó ê ëèñòó ïî ïðèçíàêó íàõîæäåíèÿ îïðåäåëåííîé èíôîðìàöèè â îïðåäåëåííîé ÿ÷åéêå òàêîãî ëèñòà ' â äàííîì ñëó÷àå ýòî ÿ÷åéêà À1 è ñîäåðæèìîå "." Dim objSheet As Worksheet, SheetName As String For Each objSheet In ThisWorkbook.Sheets If objSheet.Range("A1") = "." Then SheetName = objSheet.Name: GoTo Yes Next Exit Sub ' íå íàøëè ñòðàíèöó, âûõîäèì ' Íàøëè, ÷òî èñêàëè. Ðàáîòàåì äàëüøå Yes: Sheets(SheetName).Select ' ' 2. ïðèñâàèâàíèå äèàïàçîíîâ ïåðåìåííûì Dim today As Date, i As Long ' ïðîøëàÿ "ñåãîäíÿøíÿÿ" äàòà íà âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ ôàéëà â áëîêå "ñåãîäíÿ" today = Range("H1") ' â today ëåæèò áûâøåå "ñåãîäíÿ" ' íàçíà÷àåò ïåðåìåííûì äèàïàçîíû Set today_1 = Sheets(SheetName).Range("C4:G20") ' â÷åðà Set today0 = Sheets(SheetName).Range("H4:L20") ' ñåãîäíÿ Set today1 = Sheets(SheetName).Range("M4:Q20") ' çàâòðà Set today2 = Sheets(SheetName).Range("R4:V20") ' è ò.ä. Set today3 = Sheets(SheetName).Range("W4:AA20") Set today4 = Sheets(SheetName).Range("AB4:AF20") ' ' 3. Ïðîâåðÿåì, ïðîøëàÿ äàòà "èç áóäóùåãî"? If today >= Date Then GoTo ÎÊåó ' äà, èç áóäóùåãî, ò.ê. áûâøåå "ñåãîäíÿ" åù§ íå íàñòóïèëî ' ' 4. "çàìîðàæèâàåì" âûâîä íà ýêðàí, ÷òîáû íå ìåëüòèøèëî è íå òîðìîçèëî Application.ScreenUpdating = False ' ' î÷èùàåì, åñëè ñäâèãàòü áåññìûñëåííî If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents today4.ClearContents GoTo ÎÊåó: End If ' ' ñäâèãàåì ñòîëüêî ðàç, êàêîâà ðàçíèöà ìåæäó äàòîé ïðåæíèõ äàííûõ è òåêóùåé äàòîé For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If today = today + 1 Next i ' óñòàíàâëèâàåì òåêóùóþ äàòó ÎÊåó: Range("H1") = Date ' òåïåðü ìîæíî âûâåñòè ðåçóëüòàò Application.ScreenUpdating = True End Sub
[/vba]
если она срабатывает, то всегда проходит п.п.1,2,3 (если нет ошибки в идентификации листа. Его нет, иначе смысл в процедуре пропадает) этого хватает, что практически ВСЕ ячейки ВСЕХ листов (а не только диапазонов, используемых в команде) получили формат даты.
при чем не простой формат, а тот, который имеет ячейка F2 листа "водителю" (пробовал чуточку изменить формат этой ячейки F2 n upn cpa/atsbahnn upowedyps получал вышеупомянутый негативный эффект) нюанс в том, что такой формат не получают ячейки, уже имеющие формат Даты своего вида
хотелось бы получить помощь в виде ответа, от чего так происходит и как от этого избавится?
* попутный вопрос: в программе есть условие (в п.1.), при невыполнении которого покидаем программу. как сообщить пользователю, что процедура не сработала по такой-то причине? существует ли какой-либо способ вызвать окно сообщения с возможностью задать ему текст?
** и ещë вопрос: непонятно после каких изменений, но стал наблюдаться стабильный неприятный эффект при открытии файла (он имел и ранее и имеет сейчас ссылки для забора информации из двух других экскловских файлов) эксел просит разрешить обновить связи. После получения разрешения он зависает на некоторое время, потом дико извиняется за невозможность продолжить работу, при этом берет всю вину за произошедшее на себя, просит разрешения отправить что-то там в микрософт. Оправляет, но не в стандартном виде, где окно индикации связи и передачи после надо закрывать самому, а несколько видоизменëнное, оно потом само закрывается, а эксел перезапускает сам и открывает тот же файл. После чего все нормально - он заглатывает нужные данные и все работает. Нюанс в том, что это происходит один раз, первый раз после загрузки (перезагрузки) компа. Потом можно закрывать и открывать это файл много раз - все работает быстро и безупречно. Где может быть зарыта собака?
[admin]Перед вставкой на форум копируйте код из VBE при РУССКОЙ раскладке И пользуйтесь спойлерами для длинных кодов [/admin]
Здравствуйте,
есть процедура (макрос, программа) копирует диапазоны при некоторых условиях
[vba]
Код
' ïðîãðàììà ñäâèãà äèàïàçîíîâ ñ äàííûìè ñîãëàñíî òåêóùåé äàòå Sub Moving() ' ' 1. ÏÎÈÑÊ ËÈÑÒÀ Ñ ÐÀÑÏÈÑÀÍÈÅÌ ' ×òîáû îòâÿçàòüñÿ îò èìåíè ëèñòà (ïîëüçîâàòåëü ìîæåò åãî ïåðåèìåíîâàòü ïî ñîáñòâåííîìó óñìîòðåíèþ) ' äåëàåì ïðèâÿçêó ê ëèñòó ïî ïðèçíàêó íàõîæäåíèÿ îïðåäåëåííîé èíôîðìàöèè â îïðåäåëåííîé ÿ÷åéêå òàêîãî ëèñòà ' â äàííîì ñëó÷àå ýòî ÿ÷åéêà À1 è ñîäåðæèìîå "." Dim objSheet As Worksheet, SheetName As String For Each objSheet In ThisWorkbook.Sheets If objSheet.Range("A1") = "." Then SheetName = objSheet.Name: GoTo Yes Next Exit Sub ' íå íàøëè ñòðàíèöó, âûõîäèì ' Íàøëè, ÷òî èñêàëè. Ðàáîòàåì äàëüøå Yes: Sheets(SheetName).Select ' ' 2. ïðèñâàèâàíèå äèàïàçîíîâ ïåðåìåííûì Dim today As Date, i As Long ' ïðîøëàÿ "ñåãîäíÿøíÿÿ" äàòà íà âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ ôàéëà â áëîêå "ñåãîäíÿ" today = Range("H1") ' â today ëåæèò áûâøåå "ñåãîäíÿ" ' íàçíà÷àåò ïåðåìåííûì äèàïàçîíû Set today_1 = Sheets(SheetName).Range("C4:G20") ' â÷åðà Set today0 = Sheets(SheetName).Range("H4:L20") ' ñåãîäíÿ Set today1 = Sheets(SheetName).Range("M4:Q20") ' çàâòðà Set today2 = Sheets(SheetName).Range("R4:V20") ' è ò.ä. Set today3 = Sheets(SheetName).Range("W4:AA20") Set today4 = Sheets(SheetName).Range("AB4:AF20") ' ' 3. Ïðîâåðÿåì, ïðîøëàÿ äàòà "èç áóäóùåãî"? If today >= Date Then GoTo ÎÊåó ' äà, èç áóäóùåãî, ò.ê. áûâøåå "ñåãîäíÿ" åù§ íå íàñòóïèëî ' ' 4. "çàìîðàæèâàåì" âûâîä íà ýêðàí, ÷òîáû íå ìåëüòèøèëî è íå òîðìîçèëî Application.ScreenUpdating = False ' ' î÷èùàåì, åñëè ñäâèãàòü áåññìûñëåííî If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents today4.ClearContents GoTo ÎÊåó: End If ' ' ñäâèãàåì ñòîëüêî ðàç, êàêîâà ðàçíèöà ìåæäó äàòîé ïðåæíèõ äàííûõ è òåêóùåé äàòîé For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If today = today + 1 Next i ' óñòàíàâëèâàåì òåêóùóþ äàòó ÎÊåó: Range("H1") = Date ' òåïåðü ìîæíî âûâåñòè ðåçóëüòàò Application.ScreenUpdating = True End Sub
[/vba]
если она срабатывает, то всегда проходит п.п.1,2,3 (если нет ошибки в идентификации листа. Его нет, иначе смысл в процедуре пропадает) этого хватает, что практически ВСЕ ячейки ВСЕХ листов (а не только диапазонов, используемых в команде) получили формат даты.
при чем не простой формат, а тот, который имеет ячейка F2 листа "водителю" (пробовал чуточку изменить формат этой ячейки F2 n upn cpa/atsbahnn upowedyps получал вышеупомянутый негативный эффект) нюанс в том, что такой формат не получают ячейки, уже имеющие формат Даты своего вида
хотелось бы получить помощь в виде ответа, от чего так происходит и как от этого избавится?
* попутный вопрос: в программе есть условие (в п.1.), при невыполнении которого покидаем программу. как сообщить пользователю, что процедура не сработала по такой-то причине? существует ли какой-либо способ вызвать окно сообщения с возможностью задать ему текст?
** и ещë вопрос: непонятно после каких изменений, но стал наблюдаться стабильный неприятный эффект при открытии файла (он имел и ранее и имеет сейчас ссылки для забора информации из двух других экскловских файлов) эксел просит разрешить обновить связи. После получения разрешения он зависает на некоторое время, потом дико извиняется за невозможность продолжить работу, при этом берет всю вину за произошедшее на себя, просит разрешения отправить что-то там в микрософт. Оправляет, но не в стандартном виде, где окно индикации связи и передачи после надо закрывать самому, а несколько видоизменëнное, оно потом само закрывается, а эксел перезапускает сам и открывает тот же файл. После чего все нормально - он заглатывает нужные данные и все работает. Нюанс в том, что это происходит один раз, первый раз после загрузки (перезагрузки) компа. Потом можно закрывать и открывать это файл много раз - все работает быстро и безупречно. Где может быть зарыта собака?
[admin]Перед вставкой на форум копируйте код из VBE при РУССКОЙ раскладке И пользуйтесь спойлерами для длинных кодов [/admin]карандаш
по поводу формата...я бы его менял в конце выполнения макроса. что-нить такое: [vba]
Код
sub 1() 'блаблабла Range("данные").Select Selection.NumberFormat = "нужный_нам_формат" end sub
[/vba] сообщения выводятся с помощью MSGBOX . можно вывести как простое сообщение, так и какие то переменные которые не удовлетворяют условию и на которые нужно обратить внимание [vba]
Код
MsgBox "Не указан код предмета в таблице BallOneSchool, строка №" & strBase
[/vba]
по поводу формата...я бы его менял в конце выполнения макроса. что-нить такое: [vba]
Код
sub 1() 'блаблабла Range("данные").Select Selection.NumberFormat = "нужный_нам_формат" end sub
[/vba] сообщения выводятся с помощью MSGBOX . можно вывести как простое сообщение, так и какие то переменные которые не удовлетворяют условию и на которые нужно обратить внимание [vba]
Код
MsgBox "Не указан код предмета в таблице BallOneSchool, строка №" & strBase
[/vba] "нельзя присвоить формат классу Range" - говорит эксел
да это и не решение проблемы. Залатать дырку наскоро можно, но хотелось бы устранить причину. почему ВСЕ (даже в самом дальнем уголке, внизу справа) ячейки на всех листах принимают этот формат? и не просто формат ДАТА, а именно тот, что в ячейке F2 наверняка что-то не так в датском королевстве
MsgBox вставлю, спасибо
Serge_007, про спойлер понял про раскладку - была русская, но не была решена проблема 1252 - не удалялся. Сейчас получилось. все будет по-русски.
Цитата (Матраскин)
по поводу формата...я бы его менял в конце выполнения макроса. что-нить такое:
[/vba] "нельзя присвоить формат классу Range" - говорит эксел
да это и не решение проблемы. Залатать дырку наскоро можно, но хотелось бы устранить причину. почему ВСЕ (даже в самом дальнем уголке, внизу справа) ячейки на всех листах принимают этот формат? и не просто формат ДАТА, а именно тот, что в ячейке F2 наверняка что-то не так в датском королевстве
' программа сдвига диапазонов с данными согласно текущей дате Sub Moving() ' ' 1. ПОИСК ЛИСТА С РАСПИСАНИЕМ ' Чтобы отвязаться от имени листа (пользователь может его переименовать по собственному усмотрению) ' делаем привязку к листу по признаку нахождения определенной информации в определенной ячейке такого листа ' в данном случае это ячейка А1 и содержимое "." Dim objSheet As Worksheet, SheetName As String For Each objSheet In ThisWorkbook.Sheets If objSheet.Range("A1") = "." Then SheetName = objSheet.Name: GoTo Yes Next MsgBox "Не найдена страница с расписанием по метке '.' в ячейке А1" Exit Sub ' не нашли страницу, выходим ' Нашли, что искали. Работаем дальше Yes: Sheets(SheetName).Select ' ' 2. присваивание диапазонов переменным Dim today As Date, i As Long ' прошлая "сегодняшняя" дата на время последнего сохранения файла в блоке "сегодня" today = Range("H1") ' в today лежит бывшее "сегодня" ' назначает переменным диапазоны Set today_1 = Sheets(SheetName).Range("C4:G20") ' вчера Set today0 = Sheets(SheetName).Range("H4:L20") ' сегодня Set today1 = Sheets(SheetName).Range("M4:Q20") ' завтра Set today2 = Sheets(SheetName).Range("R4:V20") ' и т.д. Set today3 = Sheets(SheetName).Range("W4:AA20") Set today4 = Sheets(SheetName).Range("AB4:AF20") ' ' 3. Проверяем, прошлая дата "из будущего"? If today >= Date Then GoTo ОКеу ' да, из будущего, т.к. бывшее "сегодня" ещ§ не наступило ' ' 4. "замораживаем" вывод на экран, чтобы не мельтишило и не тормозило Application.ScreenUpdating = False ' ' очищаем, если сдвигать бессмысленно If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents today4.ClearContents GoTo ОКеу: End If ' ' сдвигаем столько раз, какова разница между датой прежних данных и текущей датой For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If today = today + 1 Next i ' устанавливаем текущую дату ОКеу: Range("H1") = Date ' теперь можно вывести результат Application.ScreenUpdating = True End Sub
[/vba]
если программа вызывается, то всегда проходит п.п.1,2,3 и Океу (если нет ошибки в идентификации листа. Его нет, иначе смысл в процедуре пропадает) этого хватает, чтобы практически ВСЕ ячейки ВСЕХ листов (а не только диапазонов, используемых в команде) получили формат даты.
при чем не простой формат, а тот, который имеет ячейка F2 листа "водителю" (пробовал чуточку изменить формат этой ячейки F2 для проверки влияние и получал вышеупомянутый негативный эффект) нюанс в том, что такой формат не получают ячейки, уже имеющие формат Даты своего вида
хотелось бы получить помощь в виде ответа, от чего так происходит и как от этого избавится?
может дело в [vba]
Код
Yes: Sheets(SheetName).Select
[/vba] может его не выделять, а просто сделать активным?
но как тогда этот формат попадает на все другие листы?
файл не прикрепился в прошлый раз
подрограмма
[vba]
Код
' программа сдвига диапазонов с данными согласно текущей дате Sub Moving() ' ' 1. ПОИСК ЛИСТА С РАСПИСАНИЕМ ' Чтобы отвязаться от имени листа (пользователь может его переименовать по собственному усмотрению) ' делаем привязку к листу по признаку нахождения определенной информации в определенной ячейке такого листа ' в данном случае это ячейка А1 и содержимое "." Dim objSheet As Worksheet, SheetName As String For Each objSheet In ThisWorkbook.Sheets If objSheet.Range("A1") = "." Then SheetName = objSheet.Name: GoTo Yes Next MsgBox "Не найдена страница с расписанием по метке '.' в ячейке А1" Exit Sub ' не нашли страницу, выходим ' Нашли, что искали. Работаем дальше Yes: Sheets(SheetName).Select ' ' 2. присваивание диапазонов переменным Dim today As Date, i As Long ' прошлая "сегодняшняя" дата на время последнего сохранения файла в блоке "сегодня" today = Range("H1") ' в today лежит бывшее "сегодня" ' назначает переменным диапазоны Set today_1 = Sheets(SheetName).Range("C4:G20") ' вчера Set today0 = Sheets(SheetName).Range("H4:L20") ' сегодня Set today1 = Sheets(SheetName).Range("M4:Q20") ' завтра Set today2 = Sheets(SheetName).Range("R4:V20") ' и т.д. Set today3 = Sheets(SheetName).Range("W4:AA20") Set today4 = Sheets(SheetName).Range("AB4:AF20") ' ' 3. Проверяем, прошлая дата "из будущего"? If today >= Date Then GoTo ОКеу ' да, из будущего, т.к. бывшее "сегодня" ещ§ не наступило ' ' 4. "замораживаем" вывод на экран, чтобы не мельтишило и не тормозило Application.ScreenUpdating = False ' ' очищаем, если сдвигать бессмысленно If Date - today > 7 Then today_1.ClearContents today0.ClearContents today1.ClearContents today2.ClearContents today3.ClearContents today4.ClearContents GoTo ОКеу: End If ' ' сдвигаем столько раз, какова разница между датой прежних данных и текущей датой For i = 1 To Date - today If Weekday(today, 2) < 5 Then today0.Copy (today_1) today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If If Weekday(today, 2) = 5 Then today1.Copy (today_1) today0.ClearContents End If If Weekday(today, 2) = 6 Then today0.ClearContents End If If Weekday(today, 2) = 7 Then today1.Copy (today0) today2.Copy (today1) today3.Copy (today2) today4.Copy (today3) today4.ClearContents End If today = today + 1 Next i ' устанавливаем текущую дату ОКеу: Range("H1") = Date ' теперь можно вывести результат Application.ScreenUpdating = True End Sub
[/vba]
если программа вызывается, то всегда проходит п.п.1,2,3 и Океу (если нет ошибки в идентификации листа. Его нет, иначе смысл в процедуре пропадает) этого хватает, чтобы практически ВСЕ ячейки ВСЕХ листов (а не только диапазонов, используемых в команде) получили формат даты.
при чем не простой формат, а тот, который имеет ячейка F2 листа "водителю" (пробовал чуточку изменить формат этой ячейки F2 для проверки влияние и получал вышеупомянутый негативный эффект) нюанс в том, что такой формат не получают ячейки, уже имеющие формат Даты своего вида
хотелось бы получить помощь в виде ответа, от чего так происходит и как от этого избавится?
может дело в [vba]
Код
Yes: Sheets(SheetName).Select
[/vba] может его не выделять, а просто сделать активным?
но как тогда этот формат попадает на все другие листы?
что подразумевается под мусором? заменил фамилии и названия фирм на набор букв (согласно правилам форума)
проблема не в установке формата ДАТА, а в избавлении от этого формата, который почему-то устанавливается во все ячейки. это ошибка, и существует настоятельная необходимость еë устранения, т.к. последствия могут быть не только в неудобном формате именно в этом прошу помощи
Цитата (RAN)
Открыл файл, поглядел на кучу мусора, закрыл.
что подразумевается под мусором? заменил фамилии и названия фирм на набор букв (согласно правилам форума)
проблема не в установке формата ДАТА, а в избавлении от этого формата, который почему-то устанавливается во все ячейки. это ошибка, и существует настоятельная необходимость еë устранения, т.к. последствия могут быть не только в неудобном формате именно в этом прошу помощикарандаш
Сообщение отредактировал карандаш - Суббота, 23.02.2013, 21:42
Мусор - это все макросы, листы, и т.п., не имеющие отношение к вопросу.
Цитата (карандаш)
проблема не в установке формата ДАТА, а в избавлении от этого формата, который почему-то устанавливается во все ячейки.
При копировании дат Excel автоматически выбирает формат. Формат "Общий" ("General"), скорее всего, проблему не решит. Нужно устанавливать пользовательский форматю
Мусор - это все макросы, листы, и т.п., не имеющие отношение к вопросу.
Цитата (карандаш)
проблема не в установке формата ДАТА, а в избавлении от этого формата, который почему-то устанавливается во все ячейки.
При копировании дат Excel автоматически выбирает формат. Формат "Общий" ("General"), скорее всего, проблему не решит. Нужно устанавливать пользовательский форматюRAN
Мусор - это все макросы, листы, и т.п., не имеющие отношение к вопросу.
понимаете, я перебрал все возможные (с моей точки зрения) варианты т.е. когда есть какие-то макросы, когда их нет ставил Stop в разных строках в программе Moving и пытался через F8 пошагово пройти программу но так и не смог найти комбинации при которой возникает эта досадная "ошибка" не смог найти какой именно макрос или программа порождает эту ситуацию поэтому и оставил "весь этот мусор" потому, что иногда открываешь файл - все нормально. И даты позволяет менять - ничего не происходит а иногда, вроде бы даже ничего не успевает срабатывать, только откроешь файл - а все ячейки уже "изгажены" ненужным форматом (потому, что если в ячейку попадает простое значение 0 (ноль), оно отображается как 1 явнаря 1900 года. Ерунда какая-то досадная) и попытка дополнить книгу новыми доделками натыкается на невозможность применить нужный формат в новом месте.
Цитата (RAN)
При копировании дат Excel автоматически выбирает формат
от чего зависит выбор Экселом того или иного формата?
хорошо, пусть выбирает - но при чем тут ячейки, которые не участвуют в копировании?
p.s. при пошаговой отладке увидел, что второй и третий листы почему-то находятся в состоянии "выбрать все", как будто кто-то нажал Ctrl+A
попробую "упростить" файл и выложить.
Цитата (RAN)
Мусор - это все макросы, листы, и т.п., не имеющие отношение к вопросу.
понимаете, я перебрал все возможные (с моей точки зрения) варианты т.е. когда есть какие-то макросы, когда их нет ставил Stop в разных строках в программе Moving и пытался через F8 пошагово пройти программу но так и не смог найти комбинации при которой возникает эта досадная "ошибка" не смог найти какой именно макрос или программа порождает эту ситуацию поэтому и оставил "весь этот мусор" потому, что иногда открываешь файл - все нормально. И даты позволяет менять - ничего не происходит а иногда, вроде бы даже ничего не успевает срабатывать, только откроешь файл - а все ячейки уже "изгажены" ненужным форматом (потому, что если в ячейку попадает простое значение 0 (ноль), оно отображается как 1 явнаря 1900 года. Ерунда какая-то досадная) и попытка дополнить книгу новыми доделками натыкается на невозможность применить нужный формат в новом месте.
Цитата (RAN)
При копировании дат Excel автоматически выбирает формат
от чего зависит выбор Экселом того или иного формата?
хорошо, пусть выбирает - но при чем тут ячейки, которые не участвуют в копировании?
p.s. при пошаговой отладке увидел, что второй и третий листы почему-то находятся в состоянии "выбрать все", как будто кто-то нажал Ctrl+A