我有一份工作可以将调查结果(纸质形式)输入excel。 我从未在Office中写过任何宏:(
这是我基本上需要的东西:
任何可以让我知道如何在欢迎
中编写此宏的线索非常感谢您阅读此内容......
EDIT1:我想问题不够明确...... 我需要宏来读取我的键盘输入('1575')并将整数'1''5''7'和'5'写入预定义的行。现在,我有一个创建表单的想法,但我需要事件处理程序,当我按下一个键时会将焦点更改为下一个输入,因为我想避免一直按TAB ...
答案 0 :(得分:3)
在我看来,你需要一个只有一个文本框的小用户表单,一个显示数据输入顺序的范围,比如说:
A组| E | D | F | ģ
和表格一起使用一些代码,说:
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
答案 1 :(得分:1)
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栏中输入四位数字,则会将它们分散到正确的列。它位于工作表的模块中,而不是标准模块。
答案 2 :(得分:-1)
如果我正确理解了这个问题,您希望用户只能输入数字,而无需使用输入或箭头来完成输入。
例如,输入“1253216 ...”而不是“1 2 5 ...”
如果是这样,遗憾的是没有与进入公式栏的单个字符相对应的事件。唯一与远程相关的事件是选择更改和更改。但是,我认为没有任何方法可以将这些用于此目的(在公式栏输入过程中不会触发它们)。
一个想法:使用文本格式创建和输入列,并指示用户在一个大字符串中键入答案(如“1253216”等),然后将公式放在每个其他单元格中,从而解析出第n个字符输入列并将其更改为值。例如:
将范围名称“输入”应用于A列,范围名称“N”应用于第1行,然后在任何其他单元格中,将此公式:
=VALUE(MID(Inputs,N,1))
缺点是,用户在完成输入整个数字串并输入或箭头后才会知道是否出现了错误。