Vba 如何将用户输入附加到工作表中的第一个空行?
我正在为Excel表单编写VB代码,该表单提示用户回答一系列问题,然后将回答按行存储在工作表上。目前,代码将第一个响应存储在A2中,然后将第二个响应存储在B2中,以此类推。当屏幕上出现感谢提示时,sub结束 我想做的是,当所有问题都得到回答时,光标将移动到下一行(A3)的第一个单元格,以便为其他人存储相同问题的答案。它必须继续移动到下一行 这些是主要的代码Vba 如何将用户输入附加到工作表中的第一个空行?,vba,excel,Vba,Excel,我正在为Excel表单编写VB代码,该表单提示用户回答一系列问题,然后将回答按行存储在工作表上。目前,代码将第一个响应存储在A2中,然后将第二个响应存储在B2中,以此类推。当屏幕上出现感谢提示时,sub结束 我想做的是,当所有问题都得到回答时,光标将移动到下一行(A3)的第一个单元格,以便为其他人存储相同问题的答案。它必须继续移动到下一行 这些是主要的代码 Sub dform () Dim mName As String mName = InputBox("What is you
Sub dform ()
Dim mName As String
mName = InputBox("What is your maiden named", "Maiden Name")
Range("A2").Select
ActiveCell.FormulaR1C1 = mName
x = MsgBox("Are you still married?", 4)
If x = 6 Then Range("G2").Value = "Yes"
If x = 7 Then Range("G2").Value = "No"
Exit Sub
End Sub
两种可能的解决办法是:
- 将最后使用的行的编号存储在隐藏的工作表中
- 您“读取”工作表中的信息,并将数据存储在第一个空行中
utilitySheet
的工作表,并且您存储了单元格B2
中使用的最后一行。当然,该值必须是整数
因此,您可以是这样的:
sub dform()
dim mName as String
dim nRow as Integer
nRow = ThisWorkbook.Sheets("utilitySheet").Cells(2,2).Value
' ...
If x = 6 then ThisWorkbook.Sheets("results").Cells(nRow + 1, 7).Value = "Yes"
If x = 7 then ThisWorkbook.Sheets("results").Cells(nRow + 1, 7).Value = "No"
' ...
' Update the row number in the utility sheet
ThisWorkbook.Sheets("utilitySheet").Cells(2,2).Value = nRow + 1
end sub
您可以尝试在循环中使用单元格或偏移属性:
首先,您可能需要编辑您的问题,因为这些问题的内容非常不同:
What is your maiden named
What is your maiden name?
我对你的代码做了一些修改。这些评论应该有助于你理解正在发生的事情。使用这种方法,您可以提问,而无需选择或显示包含所有答案的工作表
我已将硬编码行替换为变量,该变量设置为ws
对象a列中的第一个空行。您可以将ws
设置为工作表的任何调用。现在,您可以根据需要多次运行它,它将始终将新答案附加到新行
' use this statement at the top of all modules to require variable declaration
Option Explicit
Sub dform()
' declare your variables
Dim wb As Workbook
Dim ws As Worksheet
Dim firstEmptyRow As Long
Dim mName As String
Dim x As Long
' you need the "set" keyword for object variables
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
' the best way to get the last row is to go up from the bottom of the sheet
' add 1 to get the first empty row
firstEmptyRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1
mName = InputBox("What is your maiden named", "Maiden Name")
' always avoid selecting or activating in VBA code
ws.Range("A" & firstEmptyRow).Value = mName
x = MsgBox("Are you still married?", 4)
If x = 6 Then ws.Range("G" & firstEmptyRow).Value = "Yes"
If x = 7 Then ws.Range("G" & firstEmptyRow).Value = "No"
Exit Sub
End Sub
非常感谢你,我的朋友。我试试看。再次感谢您的输入Hanks alot先生,我也会尝试您的方法您不需要存储、维护和查找最后一行的开销,因为计算起来很简单。如果工作表不是由此代码位编辑的,则此操作也会失败。重复的