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

Страницы: 1
Неправильная работа макроса удаления строк
 
Здравствуйте, помогите пожалуйста решить следующую проблему  
При наличии фильтрации и скрытых столбцах некорректно выполняется макрос удаления строк.  
А именно не удаляются значения из скрытой части таблицы
Импорт данных без сохранения связей
 
записываю макрорекодером импорт данных из листа Excel  
при импорте убираю галочку "Сохранить определение запроса"  
в результате получаю следующий код  
 
Sub Макрос1()  
 
   Range("A1").Select  
   With ActiveSheet.QueryTables.Add(Connection:=Array( _  
       "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=X:\ЖурналЗаказов.xls;Mode=Share Deny Write;Extended Prope" _  
       , _  
       "rties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35" _  
       , _  
       ";Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Databa" _  
       , _  
       "se Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fa" _  
       , "lse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"), _  
       Destination:=Range("A1"))  
       .CommandType = xlCmdTable  
       .CommandText = Array("ЖурналЗаказов$")  
       .Name = "ЖурналЗаказов"  
       .FieldNames = False  
       .RowNumbers = False  
       .FillAdjacentFormulas = False  
       .PreserveFormatting = True  
       .RefreshOnFileOpen = False  
       .BackgroundQuery = False  
       .RefreshStyle = xlInsertDeleteCells  
       .SavePassword = False  
       .SaveData = True  
       .AdjustColumnWidth = True  
       .RefreshPeriod = 0  
       .PreserveColumnInfo = True  
       .SourceDataFile = "X:\ЖурналЗаказов.xls"  
       .Refresh BackgroundQuery:=False  
   End With  
End Sub  
 
при его выполнении таблица импортируется со связью (определение диапазона сохранено)  
подскажите в чем может быть проблема
VBA использование FindFormat
 
Использую код для поиска ячеек с форматом "bold". Пример взял из книги Уокенбаха но он чето зависает. Может кто знает в чем проблема.  
 
 
With Application.FindFormat  
   .Clear  
   .Font.Bold = True  
End With  
 
Set FirstCell = Selection.Find(What:="", SearchFormat:=True)  
 
If FirstCell Is Nothing Then  
   MsgBox "Ячейка с таким форматирование не найдена"  
   Exit Sub  
End If  
 
Set AllCells = FirstCell  
Set FoundCell = FirstCell  
Do  
   Set FoundCell = Selection.FindNext(After:=FoundCell)  
   Set AllCells = Application.Union(AllCells, FoundCell)  
   'MsgBox AllCells.Address  
   If FoundCell.Address = FirstCell.Address Then Exit Do  
Loop  
AllCells.Select
Макрос проверки наличия значения в диапазоне
 
Необходимо проверить наличие указанной в комбобоксе компании в списке компаний  
Делаю это через функцию листа CountIf:  
 
Private Sub ComboBox1_Change()  
 
Range("SelectedCompany") = ComboBox1.Text  
If WorksheetFunction.CountIf(Range(Range("ListOfCompany"), "SelectedCompany")) = 0 Then Exit Sub  
 
End Sub  
 
подскажите как проверить наличие в диапазоне значения комбобокса не занося данные в лист
Формула в удобном для VBA виде
 
Есть необходимость при нажатии на кнопку вводить в ячейку следующую формулу:  
 
=ЕСЛИ(ЕНД(ЕСЛИ(ВПР(B3;BookOfOrder;13;ЛОЖЬ)=E3;ВПР(B3;BookOfOrder;12;ЛОЖЬ);ВПР(B3;BookOfOrder;ПОИСКПОЗ(E3;TitleOfSubkontraktorCompany;ЛОЖЬ);ЛОЖЬ)));0;ЕСЛИ(ВПР(B3;BookOfOrder;13;ЛОЖЬ)=E3;ВПР(B3;BookOfOrder;12;ЛОЖЬ);ВПР(B3;BookOfOrder;ПОИСКПОЗ(E3;TitleOfSubkontraktorCompany;ЛОЖЬ);ЛОЖЬ)))  
 
пробывал макрорекодером он говорит что не может перевести эту формулу в удобный для VBA вид. знатоки VBA подскажите как правильно прописать эту формулу в коде.
Альтернатива "Если"
 
Подскажите есть ли менее ресурсоемкая альтернатива функции "если". В таблице в 50 колонок в каждой колонке порядка 1000 условий типа:  
 
=если(А2=А$1$;1;""),  
=если(А3=А$1$;1;""),  
 
и так до тысячи. Что в результате дает 50 кб на столбце и порядка 2,5 метров на таблице.
VBA: Аналог нажатия кнопки "Home"
 
При нажатии кнопки "Номе" вне зависимости от положения выделенной ячейки и от того все ли ячейки в строке заполнены выполняется переход к первой ячейке в строке.  
Очень нужно реализовать этот с помощью VBA.
Автофильтр в Combobox
 
Основная задача использовать Combobox как альтернативу стандартному автофильтру.    
Т.е при нажатии на Combobox отображался перечень уникальных значений столбца.  
А после выбора определенного значения выполнялась фильтрация по данному значению.  
Понимаю что легче воспользоваться стандартным автофильтром и не морочить себе и людям голову, но "партия" сказала надо
Ошибка метод Autofilter завершен неверно
 
В таблице есть кнопка к которой привязан код который должен фильтровать по первой колонке области "R:S". Реализуется это строкой:  
 
Range("R:S").AutoFilter Field:=1, Criteria1:="<>"  
 
При выполнении код срабатывает как надо, т.е. фильтрует заданый интервал по заданому условию, но после выполнения выдает ошибку метод Autofilter из класса range завершен неверно.    
 
Может кто знает что за ерунда.
Не понятно какого выскакивает окно
 
Есть 2 файла(прикреплены к сообщению). При записи в ячейку B2 значения отличающегося от предлагаемого перечня срабатывает макрос.  
В файле "Заготовительный участок" все работает как надо, а в файле "Контакная сварка" какого то хрена  после ввода значений выскакивает окно обновления каких то значений. нигде в коде оно не вызывается. Знатоки помогите.
Не хочет работать макрос
 
Макрос должен сделать выпадающий список в ячейке из перечня задаваемого через ДВССЫЛ(ВПР($B$2;CodeForKS;2;ложь))  
Работь он не захотел и было решено заменить функции на русском на англоязычные аналоги  
получили код ,но он один хрен работать не хочет, выдает ошибку.    
 
Range("C2").Select  
   With Selection.Validation  
       .Delete  
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=INDIRECT(VLOOKUP($B$2;CodeForKS;2;FALSE))"  
       .IgnoreBlank = True  
       .InCellDropdown = True  
       .InputTitle = ""  
       .ErrorTitle = ""  
       .InputMessage = ""  
       .ErrorMessage = ""  
       .ShowInput = True  
       .ShowError = True  
   End With  
 
Проблема была решена но очень уж по дебильному. Хотелось бы понять в чем причина появления ошибки.
Как задать имя выделеному диапазону в VBA
 
Появилась необходимость задать имя выделеному диапазону с помощью VBA. решил воспользоваться макрорекодером и получил следующее:  
 
Range(Selection, Selection.End(xlToRight)).Select  
   Range(Selection, Selection.End(xlDown)).Select  
 
ActiveWorkbook.Names("кодирование").Delete  
   ActiveWorkbook.Names.Add Name:="кодирование", RefersToR1C1:= _  
       "=Заготовительный!R1C1:R3C3"  
 
Первый блок кода выделяет диапазон, а второй должен удалять имя "кодирование", если таковое имеется и присвоить это имя выделенному диапазону. Но как видете макрорекодер дает абсолютную ссылку на диапазон "=Заготовительный!R1C1:R3C3" и в случае если будет добавлена строка или столбец имя будет присваиваться не всему выделеному диапазону а только для "=Заготовительный!R1C1:R3C3"  
знатоки VBA помощи в решении.
Добавление элементов
 
На базе примера в приемах http://www.planetaexcel.ru/tip.php?aid=98  
сделал таблицу которая сравнивает значение ячейки "B2" и диапазона "operationname"  
и в случае отсутствия совпадения показывает диалоговое окно.  
Нужно, осуществить такую же проверку и для ячеек "С2" и "D2" которые будут сравниваться с диапазонами названия которых определяются значениями в ячейках "J2" и "K2"
Выпадающий список с добавлением элементов(выдает ошибку)
 
Взял за базу код из "Приемов"  
Private Sub Worksheet_Change(ByVal Target As Range)  
 
Dim lReply As Long  
 
   If Target.Cells.Count > 1 Then Exit Sub  
   If Target.Address = "$D$2" Then  
    If IsEmpty(Target) Then Exit Sub  
      If WorksheetFunction.CountIf(Range("People"), Target) = 0 Then  
         lReply = MsgBox("Добавить введенное имя " & _  
                        Target & " в выпадающий список?", vbYesNo + vbQuestion)  
         If lReply = vbYes Then  
             Range("People").Cells(Range("People").Rows.Count + 1, 1) = Target  
         End If  
      End If  
    End If  
End Sub  
 
Но появилась необходимость добавить значение ячейки $D$2 в еще один именованый диапазон  в этой же книге, но на другом листе. Для этого добавил в код после:  
           Range("People").Cells(Range("People").Rows.Count + 1, 1) = Target  
строку:  
           Range("Земляне").Cells(Range("Земляне").Rows.Count + 1, 1) = Target  
в результате чего желаемого эфекта не получил, Выдает следующую ошибку:  
Run-time error '1004    
Method 'Range'of object '_Worksheet' falied
Выборка, VBA, и еще куча хрени))
 
Имеется книга(прикреплена)состоящая из 3 листов. На первом листе в исходном тексте код фильтрующий по столбцу А:А. Значение ячеек в столбце зависит от того совпадают ли ячейки D2 и D(n). D2 получена путем сцепления ячеек B2 и C2. Значение ячейки B2 получаем из выпадающего списка полученого на базе перечня операций на листе "Таблица кодов". Значение ячейки С2 получаем выпадающим списком на базе соответствующих значений листа "Перечень заготовок" в зависимости от значения ячейки B2.  
Редактирование уже забитых в таблицу норм времени происходит путем выбора соответствующих значений в ячейках B2 и C2.  
Вопрос:    
1. Каким образом можно при необходимости дабавить новую операцию через диалоговое окно    или что нить вроде того с возможностью далнейшего редактирования  по принципу используемому в приложении.  
2. Каким образом можно добавить в имеющуюся операцию новый вариант заготовок.
Макрос по щелчку
 
имеется макрос:  
 
Private Sub Worksheet_Activate()  
ActiveSheet.Calculate  
Selection.AutoFilter Field:=1, Criteria1:="<>"  
For Each elmShp In ActiveSheet.Shapes  
elmShp.Visible = msoFalse  
Next  
End Sub  
 
Срабатывает при активации листа. Необходимо, что бы он срабатывал при каждом щелчке, и при нажатии клавиш "Enter" или "Tab".
Время в числовое значение
 
Имеется 5 ячеек  
В первой указывается время начала работы(Формат "время").    
Во второй  время окончания (Формат "время").  
Третья считает отработаные часы (Формат "время")  
В четвертой указана часовая тарифная ставка (Формат "числовой")  
В пятой необходимо получить значение заработной платы за день (Формат "числовой")  
 
Вопрос: как правильно перемножить значения 3 и 4 ячейки?
И снова выборка!!!!!!!!!!
 
Прошу прощения если было, искал но не нашел.  
Задача такова:  
1. Имеется столбец А1, допустим такого вида:  
  Яблоко  
  Мандарин  
  Яблоко  
  Яблоко  
  Персик  
  Мандарин  
  Мандарин  
2. Необходимо, чтобы в столбце А2 отобразился список такого типа:  
  Яблоко  
  Мандарин  
  Персик  
 
Заранее благодарен
Страницы: 1
Наверх