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

Страницы: 1
Сортировка автомобилей по госномеру
 
Есть таблица с данными по автомобилям. Прошу подкинуть идею, как можно в Excel 2003 реализовать макросом сортировку в столбце, содержащем госномер? Стандартная сортировка не подходит. Дело в том, что номера имеют различный формат, например: АР 314 57 или В 653 МО 57, а сортировать (для удобства поиска нужного авто) требуется в первую очередь по возрастанию трёхзначного числа в номере.
При совпадении чисел сначала должны следовать номера с одной буквой перед числом с сортировкой (по алфавиту) по первой букве перед числом, затем по первой букве после числа, затем по второй букве после числа. Далее должны следовать номера с двумя буквами перед числом, соответственно с сортировкой по алфавиту по первой, а затем по второй букве. Регион всегда один и тот же и в сортировке не участвует.

Для наглядности привожу фрагмент требуемой последовательности отсортированных номеров:

 Е 310 ЕА 57
 К 314 РР 57
 А 315 НА 57
 В 315 МО 57
 В 315 МС 57
 В 315 НТ 57
АР 315 57
АТ 315 57
ВК 315 57
 О 317 АА 57

Как временное и сильно упрощённое решение - разбил госномер на два столбца, в первом - одна или две буквы, во втором - всё остальное. Это позволяет использовать стандартную сортировку, но для дальнейшего развития возможностей таблицы (выборки, отчёты), требуется, чтобы госномер был неделимым и содержался полностью в одной ячейке.
Переменная не сохраняет присвоенное значение
 
Требуется при клике по ячейке заданного диапазона изменить её заливку на жёлтую. При следующем клике (по другой ячейке) окрасить в жёлтый новую ячейку, а предыдущей ячейке вернуть прежнюю заливку.  
Попытался так:  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Dim r As Range  
Dim c As Integer  
If Not Intersect(Target, Range("Q9:AU109")) Is Nothing Then  
If Not r Is Nothing Then  
r.Interior.ColorIndex = c  
End If  
Set r = Target  
c = Target.Interior.ColorIndex  
Target.Interior.ColorIndex = 44  
End If  
End If  
End sub  
 
По замыслу, переменная r должна запомнить первую ячейку, по которой был клик (строка 8) и сохранить это значение до клика по другой ячейке, чтобы произошёл возврат прежней заливки первой ячейке (строки 6,7). Но переменная r при втором проходе кода почему-то очищается. Как этого избежать?
Сортировка с игнорированием области заголовков
 
Область заголовков таблицы включает в себя 4 строки с объединёнными ячейками. Можно ли каким-либо образом (посредством VBA) заставить Excel 2003 сортировать данные ниже области заголовков, игнорируя наличие объединённых ячеек в "шапке"?
Разделение строковой переменной
 
В TextBox вводятся данные, группы данных разделяются только нажатием Enter. По окончании ввода всё содержимое TextBox присваивается одной переменной.  
Как можно (если можно) с помощью макроса выделить из этой единственной переменной отдельные группы данных и загнать каждую группу в отдельную переменную.
После выполнения макроса не видно лист
 
Есть книга А с нехитрым макросом. Макрос книги А получает в качестве объекта книгу B, выборочно копирует из книги B в книгу А данные, производит их обработку и отсылает результат обратно в книгу В, после чего сохраняет книгу В. Если после выполнения макроса вручную открыть книгу В, то в ней ничего нет, точнее не видно листа с данными, хотя до выполнения макроса всё было видно. При этом, если обратиться к книге В через макрос, то видно, что данные там всё-таки есть, они накапливаются в соответствии с алгоритмом и никуда не исчезают. Почему лист может стать невидимым,при том, что в макросе практически нет никаких команд кроме GetObject, Copy, Paste, Sort и Save?
Переменная в имени элемента управления
 
Задача.  
В UserForm имеется 11 TextBox'ов. Несколько первых TextBox'ов могут быть заполнены. Нужно взять содержимое 11-го TextBox'а и вставить в следующий за последним непустым TextBox. Попытался так:  
 
Private Sub ()  
Dim n As Integer  
n = 1  
Do Until TextBoxn.Value Is Empty  
If TextBoxn.Value Is Empty Then  
TextBoxn = TextBox11.Value  
Else  
n = n + 1  
End If  
Loop  
End Sub  
 
Но Эксель отказывается признавать объект с лишней буквой в конце. Есть ли способы прикрутить переменную к номеру TextBox'а?
Альтернатива автофильтру
 
В макросе имеется строка:  
 
Cells(6, 3 + User).AutoFilter Field:=(3 + User), Criteria1:="<>Выполнено", Operator:=xlAnd, Criteria2:="*"  
 
Чем можно заменить эту строку, чтобы выполнялась та же самая фильтрация, но в строке заголовков не появлялись кнопки выпадающего списка автофильтра?
Зависание при попытке закрытия приложения макросом
 
Замысел следующий. При открытии книги пытаемся получить в качестве объекта другую книгу.  
Если получается, производим с ней некоторые действия. В случае ошибки выдаём сообщение пользователю и закрываем только книгу, если у пользователя имеются другие открытые книги  (этот вариант работает) либо приложение целиком, если других открытых книг нет (в этом случае виснет). Код приведён ниже. Подскажите, в чём ошибка.  
 
Sub Workbook_Open()  
On Error Resume Next  
Set Tasks = GetObject("C:\......xls")  
If Err Then  
MsgBox ("Файл базы данных отсутствует. Таблица будет закрыта")  
ThisWorkbook.Saved = True  
If Workbooks.Count > 1 Then  
ThisWorkbook.Close  
Else  
Application.Quit  
End If  
End If  
......  
End sub
Разрешения на защищённом листе
 
Можно ли макросом запретить выделение всех ячеек листа, за исключением указанного диапазона, при этом запретив в этом указанном диапазоне изменение ячеек пользователем? Если да, то как?
Макрос для запрета сохранения
 
Можно ли макросом запретить сохранение файла так, чтобы попытка сохранения просто игнорировалась?  
Единственный работающий вариант, который пришёл в голову:  
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
ThisWorkbook.Saved = True  
ThisWorkbook.Close  
End Sub  
 
Проблема в том, что приходится закрывать книгу, а если этого не сделать она сохраняется.
Проверка множества вариантов
 
Допустим, ячейки А1:А10 могут принимать 6 значений, например "РОМА", "ВАСЯ", "ПЕТЯ", "ИРА", "МАША", "ОЛЯ". Требуется проверить, являются ли текущие значения всех десяти ячеек мужскими именами. Если да (в любых возможных комбинациях), то name = True, в противном случае False.  
Подскажите пожалуйста, как наиболее оптимально осуществить такую проверку? Пока в арсенале только If-Then, но, может, есть вариант покороче?
Операции с файлами
 
Подскажите пожалуйста примеры макросов для осуществления нижеследующих действий с произвольным файлом.  
 
1. Создание.  
2. Удаление.  
3. Переименование.  
4. Копирование.  
5. Перемещение.
Скрытый обмен данными между книгами
 
Допустим, имеется несколько книг с различными данными (без формул, без макросов, просто хранилища упорядоченной информации) и ещё одна книга-процессор, в которой реализованы алгоритмы обработки данных и соответствующий интерфейс. Книга-процессор должна обращаться к книгам-хранилищам брать из них массивы данных, обрабатывать и отправлять результат обратно. Вопрос: как можно в макросе организовать чтение из книг-хранилищ и запись в них, чтобы визуально этот процесс никак не проявлялся ни в самом Excel (открытием окон) ни, желательно, в панели задач Windows? В диспетчере, так и быть, пусть появляются :)
Вопросы по работе с общедоступными книгами
 
Два вопроса.  
 
1. На сетевом диске имеется книга с совместным доступом. Допустим, один из пользователей внёс изменения и сохранил их. Увидят ли сразу другие пользователи, у которых эта книга постоянно открыта, внесённые изменения или для этого им нужно закрыть и снова открыть эту книгу у себя?  
 
2. При открытии файла Excel, для которого не настроен совместный доступ, появляется предупреждение о том, что он используется другим пользователем. При этом имя пользователя всегда одно и то же - User. Что надо сделать, чтобы в этом сообщении отображалось уникальное имя пользователя?
Макрос не видит CheckBox
 
На Листе1 имеется CheckBox. Требуется сделать так, чтобы при открытии книги название CheckBox изменялось в соответствии со значением, которое также при окрытии книги присваивается переменной User.  
В ЭтойКниге в Sub workbook_open()пишу:  
 
Select Case Environ("username")  
Case "Ivanov": User = "Иванов"  
Case "Petrov": User = "Петров"  
Case "Sidorov": User = "Сидоров"  
End Select  
CheckBox1.Caption = User  
 
В отдельном блоке заявлена переменная Public User As Integer. При открытии книги выдаётся сообщение "Object Required" с выделением строки CheckBox1.Caption = User. Видимо программа не понимает, что такое CheckBox1 и его тоже надо объявить, но как и где?
Макрос для отправки писем
 
Есть макрос, отсылающий письмо через Outlook. Когда есть соединение с почтовым сервером, всё проходит гладко, но когда его нет вылетает сообщение об ошибке "Невозможно завершить операцию" с указанием на строку OutApp.Session.Logon. Необходимо сделать так, чтобы вместо этого сообщения выходил заданный MsgBox, а действия по изменению значения и цвета ячейки производились только в случае успешной отправки письма.  
   
Private Sub CommandButton1_Click()  
Dim OutApp As Object  
Dim OutMail As Object  
Set OutApp = CreateObject("Outlook.Application")  
OutApp.Session.Logon  
On Error GoTo cleanup  
Set OutMail = OutApp.CreateItem(0)  
                                                     
On Error Resume Next  
       
With OutMail  
  .to = ""  
  .Subject = ""  
  .Body = ""  
  .Attachments.Add  
  '.Send  
  .Display  
End With  
         
Range("A" & ActiveCell.Row).Offset(0, 2 + User) = ("Уведомление отправлено")  
Range("A" & ActiveCell.Row).Offset(0, 2 + User).Interior.ColorIndex = 42  
                   
On Error GoTo 0  
Set OutMail = Nothing  
                                                         
cleanup:  
Set OutApp = Nothing  
Application.ScreenUpdating = True  
End Sub
Текстовое поле с прокруткой
 
Подскажите пожалуйста, как можно в UserForm сделать текстовое поле, чтобы при вводе текста по достижении правого края поля (или при нажатии Enter) ввод текста продолжался со следующей строки, а по достижении нижнего края появлялась полоса прокрутки?
Группировка OptionButton на User Form
 
Подскажите пожалуйста, как в UserForm сделать несколько несвязанных групп OptionButton, чтобы в каждой из групп можно было выбрать по одному варианту?
Выделение нескольких ячеек по клику на одной из них
 
Подскажите пожалуйста, как сделать, чтобы по одному клику на ячейке выделялась не только она сама, как предусмотрено в Excel'е по умолчанию, а сразу несколько ячеек строки в заданных пределах.
При наличии Do выдаётся сообщение " Loop without Do"
 
Доброго времени суток.  
 
Задумка такова:  
 
1. Установить счётчик строк на 38.  
2. Если ячейка в столбце А (строка - по счётчику) не пустая, выполнить п.3-5. Если пустая, остановить программу.  
3. Если ячейка в определённом столбце той же строки имеет значение "Оплачено", изменить цвет шрифта в ячейке столбца А той же строки. Если нет, перейти к п.4.  
4. Увеличить счётчик строк на единицу.  
5. Перейти к п.2  
 
Код:  
 
Sub Hilight ()  
Dim taskcell as Integer  
taskcell = 38  
Do Until Range("A" & taskcell).Value = ""  
If Range("A" & taskcell).Offset(0, 2 + User) = ("Оплачено") Then  
   Range("A" & taskcell).Font.ColorIndex = 16  
   Else  
   taskcell = taskcell + 1  
Loop  
End Sub  
 
При запуске выдаётся сообщение "Compile error: Loop without Do". Помогите понять ошибку.
Не получается создать глобальную переменную
 
Доброго времени суток.  
Начал освоение VB. Нужно по работе. В дебри пока не лезу, но уже на самой поверхности упёрся в проблемку, которая упорно не желает решаться.  
Ситуация такова: на сетевом диске находится книга, к которой имеют доступ несколько пользователей. Планирую оборудовать эту книгу полезными макросами. На данном этапе требуется следующее. При открытии книги (Excel 2003) тем или иным пользователем в первую очередь проверяется его имя. В зависимости от имени, переменной (например User) присваиваются  значения от 0 до 10. Все прочие макросы книги должны будут использовать эту переменную (в основном для того чтобы ограничивать свободу действий каждого пользователя сообразно его служебным функциям). Как я понимаю, необходимо создать глобальную переменную. В объекте ЭтаКнига пишу код:  
 
Workbook_open()  
Public Usr As Integer  
 
If Environ("username") = "Ivanov_II" Then  
User = 0  
End If  
If Environ("username") = "Petrov_PP" Then  
User = 1  
End If  
........  
If Environ("username") = "Sidorov" Then  
User = 10  
 
End If  
End Sub  
 
При открытии книги получаю сообщение "Compile Error: Invalid attribute in Sub or Function"  
с выделением в коде слова Public.  
Каюсь, не штудировал матчасть от корки до корки, однако удивлён, почему Excel не позволяет сделать такую, казалось бы, простую вещь. Прошу помочь советом.
Страницы: 1
Наверх