Создание макроса Excel для быстрого ввода данных ::: VBA ::: Excel ::: - PullRequest
1 голос
/ 16 декабря 2008

У меня есть работа, чтобы ввести результаты опроса (в бумажной форме), чтобы преуспеть. Я никогда не писал макросов в Office: (

Вот, что мне в основном нужно:

  1. У меня есть предопределенные столбцы (| A | B | ... | AG | AH |)
  2. Все опросы сгруппированы в группы. Все опросы из одной группы имеют несколько (как предопределенные) одинаковых столбцов. Это всегда одни и те же столбцы, которые определяют группу
  3. Все остальные ответы опроса представлены в числовом виде [1..10].
  4. Столбцы не в том же порядке, что и ответы в servey
  5. Я хочу макрос, который будет принимать мои входные данные (например, «1575») и сначала помещать предопределенные значения в эту «группу» в | A | | B | | C |, а затем | E | = 1, | D | = 5, | F | = 7, | G | = 5, и автоматически начать ввод следующей строки.

Все, что даст мне подсказку, как написать этот макрос более чем приветствуем

Огромное спасибо за чтение этого ...

EDIT1: я полагаю, вопрос недостаточно ясен ... Мне нужен макрос, который будет читать мой ввод с клавиатуры («1575») и записывать целые числа «1», «5», «7» и «5» в предопределенные строки. На данный момент у меня есть идея сделать форму, но мне нужен обработчик событий, который переключит фокус на следующий ввод при нажатии клавиши, так как я хочу избегать постоянного нажатия клавиши TAB ...

Ответы [ 3 ]

3 голосов
/ 16 декабря 2008

Мне кажется, вам нужна небольшая пользовательская форма с просто текстовым полем, диапазоном для отображения порядка ввода данных, скажем:

Группа А | E | D | F | G

И небольшой код для формы, скажем:

Dim LastCol As Integer
Dim CurRow As Integer


Private Sub UpdateCells()
Dim Col As Variant
Dim ColumnOrder As Range

'Range that specifies data entry order'
Set ColumnOrder = Range("A3:A15")

LastCol = LastCol + 1

If LastCol > WorksheetFunction.CountA(ColumnOrder) Then
    LastCol = 1
    CurRow = CurRow + 1
End If

Col = Range("A3").Offset(0, LastCol)
Range(Col & CurRow) = TextBox1.Value
TextBox1 = ""

End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
    UpdateCells
End If
End Sub

Private Sub UserForm_Initialize()
CurRow = ActiveCell.Row
End Sub

Редактировать комментарий

В Excel последняя строка может быть немного хитрой в том, что Excel не обновляет диапазон после удаления до сохранения книги. Один из них может подойти:

Function FindLastRow()
'Assuming that data starts in A1'
r = ActiveSheet.UsedRange.Rows.Count
c = ActiveSheet.UsedRange.Columns.Count
FindLastRow = r
End Function

.

Sub LastRow()
LastRowA = ExecuteExcel4Macro("GET.DOCUMENT(10)")
LastRowB = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
End Sub

Дополнительная информация: http://www.tek -tips.com / faqs.cfm? Fid = 2115

1 голос
/ 19 декабря 2008
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim sText As String

    Application.EnableEvents = True

    If Target.Column = 1 Then  'Four digits entered in col A
        sText = CStr(Target.Value) 'convert to string
        If Len(sText) = 4 Then
            Target.Offset(0, 4).Value = Left$(sText, 1) 'write to E
            Target.Offset(0, 3).Value = Mid$(sText, 2, 1) 'D
            Target.Offset(0, 5).Value = Mid$(sText, 3, 1) 'F
            Target.Offset(0, 6).Value = Mid$(sText, 4, 1) 'G
        End If
    End If

    Application.EnableEvents = True

End Sub

Если вы введете четыре цифры в столбце A, они будут распределены по правильным столбцам. Он входит в модуль рабочего листа, а не в стандартный модуль.

0 голосов
/ 17 декабря 2008

Если я правильно понял вопрос, вы хотите, чтобы пользователь мог вводить только цифры, не используя ввод или стрелку для завершения ввода.

Например, набрав «1253216 ...» вместо «1 2 5 ...»

Если это так, к сожалению, в строке формул нет события, которое соответствует отдельным символам. Единственными событиями, которые связаны между собой, являются Изменение выбора и Изменение. Однако я не думаю, что есть какой-либо способ использовать их для этой цели (они не срабатывают при наборе строки формул).

Одна идея: создать и ввести столбец в текстовом формате и дать указание пользователям вводить ответы в одну большую строку (например, «1253216» и т. Д.), А затем поместить формулы в каждую из других ячеек, которые анализируют n-й символ столбец ввода и меняет его на значение. Например:

Примените имя диапазона «Входы» к столбцу A, имя диапазона «N» к строке 1, затем в любой другой ячейке введите следующую формулу:

=VALUE(MID(Inputs,N,1))

Недостатком является то, что пользователь не будет знать, допустили ли они какую-либо ошибку, пока он не закончит вводить всю строку цифр и не нажмет ввод или стрелку.

...