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

Страницы: 1
Автофильтр для "умной таблицы" с критерием отбора данных - массив (значения ячеек другого листа), Некорректно работает фильтр, что я не так делаю?
 
Уважаемые форумчане, помогите с применением автофильтра для "умной таблицы" . Если я правильно понимаю, то необходимо использовать 2 массива - массив ячеек и массив значений этих ячеек, однако при при применении фильтра корректный отбор не происходит и скрываются все значения таблицы. Исходная таблица содержит более 10000 строк а критериев отбора для массива может быть более 50-ти, поэтому Criteria1:=Array("11005540", "11010158", "11004137", "22009948") в качестве решения мне не подходит. Есть ли вообще решение для моей хотелки?
Код
Sub Test()
Dim MyArray() As Variant
Dim arr() As Variant

LastRow = Sheets("in").Cells(Rows.Count, 1).End(xlUp).Row
MyArray = Sheets("in").Range(Cells(1, 1), Cells(LastRow, 1)).Value

ReDim arr(1 To UBound(MyArray))

For i = LBound(MyArray) To UBound(MyArray)
        arr(i) = MyArray(i, 1)
Next

Worksheets("Лист1").ListObjects("Таблица1").Range.AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues
End Sub
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Копирование процедуры листа (по событию)- на новый лист, Копирование кода макроса на новый лист
 
Уважаемый форумчане помогите с решением, необходим макрос копирования кода, чтобы при вставке новых листов, на эти листы копировалась процедура по событию с уже существующего в книге листа. На просторах mrexcel нашел такой макрос, но при запуске сразу ошибка при объявлении переменной " Dim SrcCmod    As VBIDE.CodeModule" В чем может быть проблема?
Код
Sub CodeCopy()

  'Macro to create a new sheet and copy the macro module
  'from sheet1 to it.  Must install Microsoft Visual Basic
  'for Applications Extensibility library from Tools > References.
  
  Dim i          As Integer
  Dim NewSh      As Worksheet
  Dim SrcCmod    As VBIDE.CodeModule
  Dim DstCmod    As VBIDE.CodeModule
  
  Set NewSh = Worksheets.Add(after:=Worksheets(Worksheets.Count))

  Set SrcCmod = ActiveWorkbook.VBProject.VBComponents("Sheet1").CodeModule
  Set DstCmod = ActiveWorkbook.VBProject.VBComponents(NewSh.Name).CodeModule
  
  For i = 1 To SrcCmod.CountOfLines
     DstCmod.InsertLines i, SrcCmod.Lines(i, 1)
  Next i
  
End Sub
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
HPageBreakes Вывод "Итого" постранично., сквозные строки в "шапке" документа и более одной строки в "подвале"
 
Уважаемые форумчане объясните плз, что я не так делаю.  Тема обсуждалась много раз, поиск не помог, так как не понимаю. Есть таблица с "шапкой", после заполнения необходимо вставить в "подвал" - "ИТОГО" (более одной строки, есть пустые строки, вычисления не требуются) и подготовить к печати расставив разрывы страниц. "Подвал" переносится целиком, не должно быть "шапки" и половины "подвала" на последнем листе. Пытался приспособить под свою задачу готовое решение, но "итого" выводится только на первой странице. ЧЯНТД?  
Код
'Option Explicit
'Public iLastRow As Long
Const FIRST_ROW& = 1

Sub CreatePageSubtotals5555()
Dim iPageNum&, viewState, hpb As HPageBreak, iRow1&, iRow2&
Dim lLastRow As Long
Dim Ws As Worksheet
Set Ws = Sheets("Реестр от __.__.____")
viewState = ActiveWindow.View
ActiveWindow.View = xlPageBreakPreview
iRow1 = FIRST_ROW
For Each hpb In ActiveSheet.HPageBreaks
    iPageNum = iPageNum + 1
    'iRow2 = hpb.Location.Row - 9
    lLastRow = hpb.Location.Row - 9
    Rows(lLastRow).Resize(9).Insert
    
    ''-------------------------------------
    '' ПОДВАЛ
Range(Ws.Cells(lLastRow - 1, 1), Ws.Cells(lLastRow - 1, 6)).Borders(xlEdgeBottom).Weight = xlMedium
Range(Ws.Cells(lLastRow, 1), Ws.Cells(lLastRow + 8, 6)).Clear

Ws.Cells(lLastRow + 3, 2) = "СДАЛ:"
Ws.Cells(lLastRow + 3, 2).Font.Bold = True
Ws.Cells(lLastRow + 3, 3).Borders(xlEdgeBottom).Weight = xlThin
Range(Ws.Cells(lLastRow + 3, 4), Ws.Cells(lLastRow + 3, 5)).Merge
Range(Ws.Cells(lLastRow + 3, 4), Ws.Cells(lLastRow + 3, 5)).HorizontalAlignment = xlCenter
Range(Ws.Cells(lLastRow + 3, 4), Ws.Cells(lLastRow + 3, 5)).Font.Bold = True
Range(Ws.Cells(lLastRow + 3, 4), Ws.Cells(lLastRow + 3, 5)).Value = "ПРИНЯЛ:"

Ws.Cells(lLastRow + 3, 6).Borders(xlEdgeBottom).Weight = xlThin
Ws.Cells(lLastRow + 4, 3) = "(подпись)"
Ws.Cells(lLastRow + 4, 3).HorizontalAlignment = xlCenter
Ws.Cells(lLastRow + 4, 3).Font.Size = 7
Ws.Cells(lLastRow + 4, 3).VerticalAlignment = xlTop
Ws.Cells(lLastRow + 4, 6) = "бригадир"
Ws.Cells(lLastRow + 4, 6).HorizontalAlignment = xlCenter
Ws.Cells(lLastRow + 4, 6).Font.Size = 7
Ws.Cells(lLastRow + 4, 6).VerticalAlignment = xlTop
Ws.Cells(lLastRow + 6, 3) = "М.П."
Ws.Cells(lLastRow + 6, 6).Borders(xlEdgeBottom).Weight = xlThin
Ws.Cells(lLastRow + 7, 6) = "контролер"
Ws.Cells(lLastRow + 7, 6).HorizontalAlignment = xlCenter
Ws.Cells(lLastRow + 7, 6).Font.Size = 7
Ws.Cells(lLastRow + 7, 6).VerticalAlignment = xlTop
Range(Ws.Cells(lLastRow + 7, 3), Ws.Cells(lLastRow + 7, 6)).Borders(xlEdgeBottom).Weight = xlMedium
Ws.Cells(lLastRow + 8, 3) = "Примечание:"
Ws.Cells(lLastRow + 8, 3).Font.Bold = True
Ws.Cells(lLastRow + 8, 3).Font.Color = RGB(191, 191, 191)
Range(Ws.Cells(lLastRow + 8, 4), Ws.Cells(lLastRow + 8, 6)).Merge
Range(Ws.Cells(lLastRow + 8, 4), Ws.Cells(lLastRow + 8, 6)).Borders(xlEdgeBottom).Weight = xlMedium
Range(Ws.Cells(lLastRow + 8, 4), Ws.Cells(lLastRow + 8, 6)).Borders.Color = RGB(191, 191, 191)

   ''----------------------------------------------------
'    Cells(iRow2, ITOGO_COL) = "Итого по странице " & iPageNum & ":"
'    Range(Cells(iRow2, FIRST_COL), Cells(iRow2, LAST_COL)).FormulaR1C1 = _
'        "=SUBTOTAL(9,R[" & iRow1 - iRow2 & "]C:R[-1]C)"
'    Rows(iRow2).Font.Bold = True
    iRow1 = lLastRow '+ 9
Next
'iRow2 = Cells(Rows.Count, FIRST_COL).End(xlUp).Row + 1
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row '+ 9 'hpb.Location.Row - 9

ActiveWindow.View = viewState
End Sub
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Вывод строковых значений в ячейку через запятую, Объединение строковых значений при вводе с контролов формы
 
Уважаемые гуру, прошу вашей помощи! Понимаю, что решение где-то на поверхности, но самостоятельно решить не могу. Поиск по сайту не помог. Нужно вывести в ячейку значения combobox'ов и textbox'ов как одну строку разделенную запятыми. Понимаю, что нужна некая проверка на заполненность поля и в случае если поле не пустое, после значения ставить запятую. Пытался решить вопрос при помощи Replace, но желаемый результат не получен.
Код
Private Sub CommandButton1_Click()
lRow = WorksheetFunction.CountA(Range("B:B")) + 1
i = lRow - 1

strana = ComboBox1.Value
raion = ComboBox2.Value
gorod = "г. " & TextBox1.Text
ulica = TextBox2.Text
dom = "д. " & TextBox3.Text
kvartira = "кв. " & TextBox4.Text

Addr = strana & ", " & raion & ", " & gorod & ", " & ulica & ", " & dom & ", " & kvartira ' если поле пустое получается лишняя запятая
'Addr = Replace(Application.Trim(strana & " " & raion & " " & gorod & " " & ulica & " " & dom & " " & kvartira), " ", ", ") ' вставляет запятую 
 'вместо каждого пробела вообще везде


Sheets(1).Cells(lRow, 2).Value = i
Sheets(1).Cells(lRow, 5).Value = Addr
Unload Me
End Sub

Private Sub UserForm_Initialize()
With Me.ComboBox1
.AddItem "Россия"
.AddItem "Уганда"
End With
With Me.ComboBox2
.AddItem "Ханты-Мансийский АО"
.AddItem "Северо-западный район"
End With
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Вычисление временного промежутка, Ошибка при создании пользовательской функции
 
Уважаемые форумчане, сломал мозг в поисках решения при создании пользовательской функции нахождение временного промежутка. Поиск по форуму не помог. ЧЯДНТ?

Код
Function ЧАСИКС(сутки, начало, конец)
'On Error Resume Next
If конец <= начало Then
ЧАСИКС = (конец + сутки) - начало
Else
ЧАСИКС = конец - начало
End If
End Function
' сейчас это работает по формуле на листе
' Начало - лежит в ячейке Время!D6, конец в ячейке Время!D7
' ячейка in!R$2 принимает значение "24:00" если ячейка Время!D6 не пустая
' вариант №1 =ЕСЛИ(Время!D6="";"";"24:00") Ячейки отформатированы в [ч]:мм
'ЕСЛИОШИБКА(ЕСЛИ(Время!D7<=Время!D6;(in!R$2+Время!D7)-Время!D6;Время!D7-Время!D6);"")
'формула получается громоздкая и труднопонимаемая,
' если "протянуть" формулу, то Эксель понимает как 2-1,3-2,4-3, а надо 2-1, 4-3, 6-5 и.т.д.,
' исправлять руками большая вероятность ошибки при большом количестве строк.
' вариант №2 не лучше: =ЕСЛИ(Время!D6="";"";ЕСЛИ(Время!D7<=Время!D6;("24:00"+Время!D7)-Время!D6;Время!D7-Время!D6))
'так же не добавляет понятности, но это все работает
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Значение в ячейке по флажку CheckBox на форме, Связь ячейки с ActiveX CheckBox
 
Уважаемые форумчане, прошу Вашей помощи. Есть userform с некоторым количеством CheckBox'ов во фрейме, по флажку в форме, на листе проставляется значение 0 или 1 (значение участвует в формуле округления, если значение=0, округляется до 3-х знаков, если =1 до 4-х) . Написал код, он получается громоздким, если  ли возможность оптимизировать код? Возможно тема обсуждалась, буду так же рад помощи ссылкой на топик.

Код
Private Sub ОКButton3_Click()
Application.ScreenUpdating = False
  Application.EnableEvents = False

  If CheckBox1.Value = True Then
  Sheets("Актпрораб.").Cells(13, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(13, 15).Value = 0
     End If
   If CheckBox2.Value = True Then
  Sheets("Актпрораб.").Cells(14, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(14, 15).Value = 0
     End If
  If CheckBox3.Value = True Then
  Sheets("Актпрораб.").Cells(15, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(15, 15).Value = 0
     End If
  If CheckBox4.Value = True Then
  Sheets("Актпрораб.").Cells(16, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(16, 15).Value = 0
     End If
      If CheckBox5.Value = True Then
  Sheets("Актпрораб.").Cells(17, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(17, 15).Value = 0
     End If
      If CheckBox6.Value = True Then
  Sheets("Актпрораб.").Cells(18, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(18, 15).Value = 0
     End If
      If CheckBox7.Value = True Then
  Sheets("Актпрораб.").Cells(19, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(19, 15).Value = 0
     End If
      If CheckBox8.Value = True Then
  Sheets("Актпрораб.").Cells(20, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(20, 15).Value = 0
     End If
      If CheckBox9.Value = True Then
  Sheets("Актпрораб.").Cells(21, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(21, 15).Value = 0
     End If
      If CheckBox10.Value = True Then
  Sheets("Актпрораб.").Cells(22, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(22, 15).Value = 0
     End If
      If CheckBox11.Value = True Then
  Sheets("Актпрораб.").Cells(23, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(23, 15).Value = 0
     End If
      If CheckBox12.Value = True Then
  Sheets("Актпрораб.").Cells(24, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(24, 15).Value = 0
     End If
      If CheckBox13.Value = True Then
  Sheets("Актпрораб.").Cells(25, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(25, 15).Value = 0
     End If
      If CheckBox14.Value = True Then
  Sheets("Актпрораб.").Cells(26, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(26, 15).Value = 0
     End If
      If CheckBox15.Value = True Then
  Sheets("Актпрораб.").Cells(27, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(27, 15).Value = 0
     End If
      If CheckBox16.Value = True Then
  Sheets("Актпрораб.").Cells(28, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(28, 15).Value = 0
     End If
      If CheckBox17.Value = True Then
  Sheets("Актпрораб.").Cells(29, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(29, 15).Value = 0
     End If
      If CheckBox18.Value = True Then
  Sheets("Актпрораб.").Cells(30, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(30, 15).Value = 0
     End If
      If CheckBox19.Value = True Then
  Sheets("Актпрораб.").Cells(31, 15).Value = 1
    Else
     Sheets("Актпрораб.").Cells(31, 15).Value = 0
     End If
  
 
  Unload Me
'ThisWorkbook.Save
 Application.ScreenUpdating = True
 Application.EnableEvents = True
End Sub
 

'Подозреваю, что должно быть как то так: 
'For Each ctl In Me.Frame9.Controls
 '   If ctl.Value = True Then
'а вот как связать значение ячейки с чекбоксом не понимаю
' и еще подозреваю, что для активации userform с проставленными флажками придется так же перебирать значения


Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Счетчик в исходном файле
 
Здравствуйте уважаемые форумчане, возможно есть готовое решение проблемы, так как она не раз обсуждалась. Тем не менее поиск по форуму не смог мне помочь. Буду благодарен любой помощи советом или ссылкой.
Задача: Есть исходный пустая книга (шаблон). Макрос сохраняет новую книгу как книгу с новым названием из ячейки и новым порядковым номером. Исходный файл не закрывается, новый файл закрывается.  Не могу разобраться как сделать счетчик в исходной книге, сохраняющим новый порядковый номер ТОЛЬКО при выполнении макроса.
Тело макроса привожу:
Код
Sub SaveWorkbookAsNewFile()
    Dim ActBook As Workbook
    Dim CurrentFile As String
    Dim NewNumb As Variant
    Dim strDate As String
 
    Application.ScreenUpdating = False    ' Prevents screen refreshing.
    CurrentFile = ThisWorkbook.FullName
    
    strDate = Format(Now, "dd/mm/yy"
    NewNumb = Range("F1".Value
    ActiveWorkbook.SaveAs _
    Filename:=ThisWorkbook.Path & "\" & [L2] & " " & "(" & strDate & "" & ".xls"
    
    MsgBox "Сохранено как " & "-" & [L2] & " " & "в" & " " & ThisWorkbook.Path
          
    Set ActBook = ActiveWorkbook
    
    Workbooks.Open CurrentFile
    NewNumb = NewNumb + 1  'Подозреваю ошибку в этой строке.
    ActBook.Close
    Application.ScreenUpdating = True
End Sub

Спасибо, с уважением к вашим светлым головам
Путь в тысячу ли начинается со слов: "Все в порядке, но есть пара правок..." Лао Цзы
Страницы: 1
Наверх