Страницы: 1
RSS
Как в UserForm вводить значение все сразу
 
Здравствуйте

Имеется форма ввода каждый параметр вводиться поочередно по умолчанию, а у меня таблица очень большая и это занимает секунд 5 (каждый пункт вводиться в ячейку и идет небольшой перечет.
manual calculate не могу применить
На листе ввода вшиты макросы которые делают изменение только ячеек на 3 столбце вверх и вниз от курсора потому менять параметр manual calculate не могу нужно чтоб вводило все сразу если это возможно конечно….

Как сделать так чтоб вводилось за один заход?
пример. как есть
1. вводит CDate
2. вводит exp
3. вводит inc
Код
Cells(myRow, 2) = CDate(Me.MyDate)
Cells(myRow, 3) = exp.Value
Cells(myRow, 4) = inc.Value

Как нужно:
1. вводит CDate,exp,inc
Код
Cells(myRow, 2) = CDate(Me.MyDate), Cells(myRow, 3) = exp.Value, Cells(myRow, 4) = inc.Value

Заранее очень благодарен!
Изменено: qweewert - 19.12.2017 19:41:00
qweewert
 
В заголовке темы вводить в форму, а фактически нужно с формы на лист. Вариант: формируйте массив и выгружайте его на лист. Можно ещё отключить пересчёт, а в конце процедуры снова включить его.
P.S. зачем Вы на форме добавили непонятные контролы, перекрывающие сразу два других?
 
Цитата
qweewert написал:
Как сделать так чтоб вводилось за один заход?
Код
Cells(myRow, 2).resize(,3) = array(CDate(Me.MyDate), exp.Value, inc.Value)
 
Код
Cells(myRow, 2).Resize(, 3) = Array(CDate(Me.MyDate), exp.Value, inc.Value, gru.Value, pgr.Value, cat.Value, pca.Value, Opys.Value)

не работает, вводит только дату в столбец 2
qweewert
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Цитата
Юрий М написал: зачем Вы на форме добавили непонятные контролы...?
Я не очень силен в VBA. Наверно по незнанию добавил…. Массивом это вводить в одну ячейку, а потом разбивать на все столбцы? А нельзя сделать это кодом VBA?

Отключить калькуляцию не могу, поскольку она у меня отключена по умолчанию и когда я делаю изменения VBA срабатывают на листе, а как отключить отключенное не знаю…..)))

на листе калькуляция у меня

Код
Private Sub Worksheet_Change(ByVal Target As Range)

Dim shtLog As Worksheet
Dim cll As Variant
Dim lngNextRow As Long

Close #1
    Filepath = ThisWorkbook.Path & "\"
    'Filename = Left(ThisWorkbook.Name, InStr(ThisWorkbook.Name, ".") - 1) & "_log.txt"
    Filename = "LOG_EXCEL.txt"
    Open Filepath & Filename For Append As #1

    On Error Resume Next
    Print #1, Date & " " & Time & " " & ThisWorkbook.Name & " " & " cell " & Target.Address & " : ñòàðå = [" & original & "], íîâå = [" & Target.Value & "]"
    On Error Resume Next
    Close #1
    original = Target.Text
'Code by Sumit Bansal from http://trumpexcel.com
'On Error GoTo Handler
'If Target.Column = 3 And Target.Value <> "" Then
'Application.EnableEvents = False
''Target.Offset(0, -1) = Format(Now(), "dd.mm.yyyy")
'Target.Offset(0, -1) = Date
'Application.EnableEvents = True
'End If
'Handler:



ActiveSheet.Calculate




    Dim FilterCol As Integer
    Dim FilterRange As Range
    Dim CondtitionString As Variant
    Dim Condition1 As String, Condition2 As String
 
    If Intersect(Target, Range("ÔÑ")) Is Nothing Then Exit Sub
 
    On Error Resume Next
    Application.ScreenUpdating = False
     
    'îïðåäåëÿåì äèàïàçîí äàííûõ ñïèñêà
   Set FilterRange = Range("Table7")
     
    'ñ÷èòûâàåì óñëîâèÿ èç âñåõ èçìåíåííûõ ÿ÷ååê äèàïàçîíà óñëîâèé
    For Each cell In Target.Cells
        FilterCol = cell.Column - FilterRange.Columns(1).Column + 1
         
        If IsEmpty(cell) Then
            Target.Parent.Range(FilterRange.Address).AutoFilter field:=FilterCol
            ' çàëèøຠïóñò³ òà ô³ëüòðè
            Sheets("Çâ³ò").Range("A11:S11").EntireRow.Hidden = False
            On Error Resume Next
Sheets("Çâ³ò").Range("B6:B15000").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False

        Else
            If InStr(1, UCase(cell.Value), " ÀÁÎ ") > 0 Then
                LogicOperator = xlOr
                ConditionArray = Split(UCase(cell.Value), " ÀÁÎ ")
            Else
                If InStr(1, UCase(cell.Value), " ² ") > 0 Then
                    LogicOperator = xlAnd
                    ConditionArray = Split(UCase(cell.Value), " ² ")
                Else
                    ConditionArray = Array(cell.Text)
                End If
            End If
            'ôîðìèðóåì ïåðâîå óñëîâèå
            If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then
                Condition1 = ConditionArray(0)
            Else
                Condition1 = "=*" & ConditionArray(0) & "*"
            End If
            'ôîðìèðóåì âòîðîå óñëîâèå - åñëè îíî åñòü
            If UBound(ConditionArray) = 1 Then
                If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then
                    Condition2 = ConditionArray(1)
                Else
                    Condition2 = "=*" & ConditionArray(1) & "*"
                End If
            End If
            'âêëþ÷àåì ôèëüòðàöèþ
            If UBound(ConditionArray) = 0 Then
                Target.Parent.Range(FilterRange.Address).AutoFilter field:=FilterCol, Criteria1:=Condition1
                ' çàëèøຠïóñò³ òà ô³ëüòðè
            Sheets("Çâ³ò").Range("A11:S11").EntireRow.Hidden = False
            On Error Resume Next
Sheets("Çâ³ò").Range("B6:B15000").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
            Else
                Target.Parent.Range(FilterRange.Address).AutoFilter field:=FilterCol, Criteria1:=Condition1, _
                    Operator:=LogicOperator, Criteria2:=Condition2
                    ' çàëèøຠïóñò³ òà ô³ëüòðè
            Sheets("Çâ³ò").Range("A11:S11").EntireRow.Hidden = False
            On Error Resume Next
    Sheets("Çâ³ò").Range("B6:B15000").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
            End If
        End If
    Next cell
     
    Set FilterRange = Nothing
    Application.ScreenUpdating = True   
End Sub
Изменено: qweewert - 20.12.2017 01:20:46
qweewert
 
Цитата
qweewert написал:
не работает, вводит только дату в столбец 2
Нет, вводит 3 значения. Чтобы ввести все 10 значений, включая два пустых, надо написать
Код
Cells(myRow, 2).Resize(, 10) = Array(CDate(Me.MyDate), exp.Value, inc.Value, _
  gru.Value, pgr.Value, cat.Value, pca.Value, , , Opys.Value)
 
Вы гений большое спасибо извините что не понял с первого раза:)
Вопрос решен!! Благодарю Казанский очень выручили!!
qweewert
Страницы: 1
Наверх