Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
А вы не хотите перенести (скопировать) всю информацию в "нормальный/новый" файл, а этот глючный удалить?
Простые макросы за простые деньги...
 
Юрий, вы что Россию на Израиль хотите променять? )))) Сказали об этом только Волшебнику, а нам нет? ))
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
Ну, если новые листы и книги создаются с нормальным форматом, то можно воспользоваться макросам, который я вам уже дал, а потом самому во всех пустых строках и столбцах заменить формат на Общий, это не сложно, если вы знаете как выделить полностью все строки и столбцы (Shift+Ctrl+ стрелочка вниз или вправо)
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
Что-то у меня такое ощущение, что у вас создался такой шаблон Книги или листа  
 
Посмотрите, есть ли у вас в папке C:\Program Files\Microsoft Office\Office14\XLSTART  файлы *.xltx. Если там есть такие файлы, то попробуйте временно удалить их из этой папки и создайте новый файл/лист Excel и посмотрите есть ли Китайские форматы.  
 
 
P.S. Если у вас Office 2007, то папка будет \Office12\XLSTART  
Если у вас Office 2010, то папка будет \Office14\XLSTART
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
1) ваш файл пустой (в нём нет данных на листе). Да, формат ячеек там китайский, но данных нет, макрос меняет формат в тех ячейках, где есть данные с Китайским форматом.  
 
2) Если вы попробуете запустить макрос на файле, где на листах есть данные (числа, текст), то макрос, должен нормально отработать. Формат поменяется только там, где в ячейках есть данные с китайским форматом.  
 
3) Хоть ваш файл и пустой, но он весит 186кб, хотя должен весить где-то 15-16кб. Т.е. какой-то глюк с файлом (внутри вашего файла есть файл styles.xml, он у вас весит 2,27мб, а должен 3кб. А так как формат *.xlsm, это заархивированный ZIP, поэтому вы этого не видите). Т.е. какой-то глюк с форматами файла.  
 
P.S. Если уже новые (чистые) листы у вас создаются с форматом "Денежный" - Юань (КНР), я бы на вашем месте попробовал бы переустановить Excel, если не найдёте другой способ. Я, к сожалению, других способов на данный момент не знаю.
ввод даных через форму
 
вы главное в коде не называйте Sheets(5)...  
потому, что    
1) это не очень понятно для вас  
2) листы могут поменять местами  
 
Пишите лучше Sheets("Лист1").Cells(1,1) = Sheets("Customers").Cells(2,2)  
Так и для вас понятно, и не страшно, если удалят, добавят или поменяют местами листы в книге
ввод даных через форму
 
да у вас и не только там опечатка, а вот тут ещё  
 
.Cells(iLastRow + 1, 4) = TextBox4.Value  
.Cells(iLastRow + 1, 4) = ComboBox1.Value  
 
т.е. вы в одну и ту же ячейку вставляете данные и из TextBox4.Value и из ComboBox1.Value. Просто я на Иврите ничего не понимаю, поэтому не стал исправлять
Поиск отличий.
 
Вот файл.  
 
P.S. у меня на ноутбуке Excel 2003, поэтому выкладываю в xls формате
ввод даных через форму
 
datosha, вы не правы. TextBox1 не попадает на А1, он попадает на  
 
.Cells(iLastRow + 1, 2) = TextBox1.Value  
 
т.е. 2-й столбец, строка iLastRow +1  
 
Вот смотрите код из вашей формы.  
 
Private Sub CommandButton1_Click()  
   Dim iLastRow As Long  
   iLastRow = Sheets("Customers").Cells(Rows.Count, 1).End(xlUp).Row  
     
   With Sheets("Customers")  
       If iLastRow = 1 Then  
           .Cells(iLastRow + 1, 1) = 1  
       Else  
           .Cells(iLastRow + 1, 1) = .Cells(iLastRow, 1) + 1  
       End If  
       .Cells(iLastRow + 1, 2) = TextBox1.Value  
       .Cells(iLastRow + 1, 2) = TextBox2.Value  
       .Cells(iLastRow + 1, 3) = TextBox3.Value  
       .Cells(iLastRow + 1, 4) = TextBox4.Value  
       .Cells(iLastRow + 1, 4) = ComboBox1.Value  
       .Cells(iLastRow + 1, 6) = TextBox5.Value  
   End With  
End Sub  
 
Просто в этом коде написано нумеровать первый столбец 1, 2, 3 и т.д.
Поиск отличий.
 
ну, первый так первый. Сейчас, правда, меня жена выгоняет из комнаты на кухню, сейчас переселюсь и займусь ))
ввод даных через форму
 
ну, вы потестируйте мой файл сперва (см. выше), если не так, то будем в вашем новом файле разбираться
ввод даных через форму
 
Так ?
ввод даных через форму
 
если честно, то очень сложно разбираться в вашем файле, т.к. всё "не по-русски" написано. А так же часть листов скрыта
ввод даных через форму
 
Абалдеть ))) Вы мне весь Excel "сломали" ))  
 
Расположение ярлычков листов с другой стороны, весь лист имеет обратный порядок столбцов )  Прикольно, это Арабский Excel такой ?
Поиск отличий.
 
хм. тут 2 вариант  
 
1) Предложенный вами. Сравнивать даты по каждому подразделению и если даты отличаются, то помечать жёлтым.  
 
2) Наплевать на подразделения и просто перебором поискать все даты из листа "мой" в листе "чужой" и если такой даты нет, то отметить жёлтым цветом.  
 
Вопрос - есть ли для вас разница, каким мы методом будем решать вашу задачу (первым или вторым ? Т.е. нужно ли делать привязку к подразделениям? Может быть такое, что у 4-го подразделения даты будут отличаться, но дата указанная на листе "Мой" у 4-го подразделения будет у 321 подразделения?  
 
Или всё же вам нужно сравнить даты по каждому подразделению?
VBA Работа с диапазоном
 
возможно, что пропали, я помню при мне грохался форум несколько раз. Разные атаки хакеров были, тогда ещё и защиты от спама не было. Это потом Николай уже переехал на более стабильный хостинг. А я помню со старым хостингом форум лежал по неделе (может чуть меньше)
VBA Работа с диапазоном
 
Игорь, по поводу  
 
With .Range("C4").Resize(UBound(a))  
 
т.к. я писал код после тестирования твоего, то я уже увидел, что код выгружает все 147 значений, и если наложить корректный результат - 27 строк, то не отличить, где заканчивается корректный и где начинается повторы. Конечно, логично выгружать на чистый лист (чистый столбец) "чистый" массив, а вот если в том столбце могут быть другие данные, то лучше его максимально очистить, поэтому я поставил размер "грязного" массива. Грубо говоря, я сделал зачищу "от дурака". Т.к. если автор тестирует те коды, которые мы ему кидаем, то чей-то код может дать 40 значений, а потом он потестирует мой и не увидит разницы, т.к. 27 первых значений будут моими, а с 28 по 40 будут чужими. Когда пишешь для себя - тут ты прав, а для чужих, лучше перестраховаться. А то потом придётся объяснять, что реально код работает, просто ты не очистил столбец С перед запуском моего кода.
VBA Работа с диапазоном
 
Юрий, я ещё тогда (в 2005) с ником не определился )), впрочем, как и сейчас ))
Автоматическое увеличение числа на единицу (создание классификатора)
 
код прописал в модуле листа "Эскизы на сборки" и он отслеживает все перемещения курсора и ввод данных ТОЛЬКО на этом листе. Нажмите Alt+F11 и посмотрите.  
 
Соответственно, если добавить ещё один лист, то его модуль будет пуст (он не будет содержать никаких макросов) и ничего с ним происходить не будет. Для этого листа так же нужно будет прописывать код
VBA Работа с диапазоном
 
KIA, о тебе ходят легенды ))  
 
P.S. Просто я знаю всех на этом форуме, т.к. сижу на нём с 2005 года, в те далёкие времена тут ещё не было модераторов, Юрия, The_Prist и т.д. )))
VBA Работа с диапазоном
 
Nerv, да, Саш, у тебя вообще всё отлично ))  
 
merdek, поищите по форуму слово Timer
Автоматическое увеличение числа на единицу (создание классификатора)
 
так?  
 
P.S. А если вам потребуется очистить значения в столбце А и В, то можно написать такой код  
 
Sub ОчисткаОбозначения()  
   [A10:B12].ClearContents
End Sub  
 
Где А10:В12 - диапазон для очистки
VBA Работа с диапазоном
 
1) Лучше (быстрее) то, что предложил Hugo, а дополнил я.  
2) в вашем коде есть необъявленные переменные, а именно: iText, iItems()  
3) в вашем коде так же попадает пустая строка и вы её переносите на лист Report. Чтобы такого не было нужно в коде дописать проверку на длину текста  
Например, так  
 
               If Len(iText) Then  
                   If Not .Exists(iText$) Then .Add iText$, iText$  
               End If  
 
Но быстрый вариант тот, который предложил Hugo. Вы обращаетесь к каждой ячейке Диапазона iSource, это достаточно медленный вариант работы макроса. А Hugo сразу берёт весь диапазон в массив и работает уже с массивом данных
VBA Работа с диапазоном
 
Автор, вот ещё один вариант, основываясь на коде от Hugo. Только с определением последней строки в столбце А  
 
Private Sub GetUniqueValueH()  
   With ThisWorkbook.Worksheets(1)  
       Dim a(), i&, ii&  
       a = .Range("A4:A" & .Cells(Rows.Count, "A").End(xlUp).Row).Value  
       ReDim b(1 To UBound(a), 1 To 1)  
       With CreateObject("Scripting.Dictionary")  
           For i = 2 To UBound(a)  
               iText$ = a(i, 1)  
               If Not .Exists(iText$) Then  
                   .Add iText$, iText$  
                   ii = ii + 1  
                   b(ii, 1) = a(i, 1)  
               End If  
           Next  
       End With  
       With .Range("C4").Resize(UBound(a))  
           .EntireColumn.Clear  
           .Value = b  
       End With  
   End With  
End Sub
VBA Работа с диапазоном
 
Hugo, по-моему, нужно писать так  
 
               If Not .Exists(iText$) Then  
                   .Add iText$, iText$  
                   ii = ii + 1  
                   b(ii, 1) = a(i, 1)  
               End If  
 
Иначе мы просто заполняем массив b всеми значениями массива а и просто выводим такой же полный список в столбец С. А нужно заполнять только не повторяющимися (для чего собственно и Словарь используется в макросе)  
 
Для афтора весь твой код такой  
 
Private Sub GetUniqueValueH()  
   With ThisWorkbook.Worksheets(1)  
       Dim a(), i&, ii&  
       a = .UsedRange.Columns(1).Value  
       ReDim b(1 To UBound(a), 1 To 1)  
       With CreateObject("Scripting.Dictionary")  
           For i = 2 To UBound(a)  
               iText$ = a(i, 1)  
               If Not .Exists(iText$) Then  
                   .Add iText$, iText$  
                   ii = ii + 1  
                   b(ii, 1) = a(i, 1)  
               End If  
           Next  
       End With  
       With .Range("C4").Resize(UBound(a))  
           .EntireColumn.Clear  
           .Value = b  
       End With  
   End With  
End Sub
Автоматическое увеличение числа на единицу (создание классификатора)
 
ну, и мой файл
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
Так вы пробовали мой макрос или нет?    
Вставил его в ваш файл. Для запуска макроса нажмите Alt+F8  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
Автоматическое увеличение числа на единицу (создание классификатора)
 
Так? См. файл
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
Предварительный макрос (без вашего файла)  
 
Sub ChangeFormatChineseToGeneral()  
Dim iSht As Worksheet, iCell As Range  
 
   For Each iSht In Worksheets  
       For Each iCell In iSht.UsedRange  
           If InStr(1, iCell.NumberFormat, "-804]", vbTextCompare) > 0 Then iCell.NumberFormat = "General"  
       Next iCell  
   Next iSht  
   MsgBox "Формат заменён!", vbInformation, ""  
End Sub
Excel 2010: Сбой форматов ячеек по умолчанию - как вернуть стандартные значения
 
написать макрос можно, выложите сюда небольшой файл-пример, с 1-2 ячейками в этом формате (всё остальное можете удалить)
Страницы: 1 2 След.
Наверх