Excel VBA:将用户输入粘贴到由用户决定的月份栏中
问题描述:
我对VBA编程非常陌生,并且我花了整个下午的时间搜索如何操作并且没有成功。Excel VBA:将用户输入粘贴到由用户决定的月份栏中
我有一个电子表格,其中包含一些月份的Jan-Dec。我想要做的是让用户输入一些值并指定一个值应粘贴到的月份。例如:1,2,3,4和十月。我期望10月栏里有1,2,3,4。
我的新手的想法是有两个字段输入一个值,一个要求输入月份的名称。然后记录一个具有月份输入副本的宏,使用find功能查找与输入相匹配的列,然后在下面一行,然后粘贴值。但是因为单元格不是动态的,所以它不会将其粘贴到正确的单元格中。
这是我一直在使用的代码部分和发生问题的地方。但我不认为这是最有效的。
ActiveWindow.ScrollRow = 1
Range("F2:G2").Select
Application.CutCopyMode = False
Range("F2:G2").Select
Selection.Copy
Sheets("2017 Agency Attendence").Select
Cells.Find(What:="november", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range(N2).Select
答
这应该可能适用于你正在做的事情。我试图评论该计划的作用,以帮助您了解它的工作原理。
- 大多数人可以很快地将一个月转换成一个数字,所以我没有写一个强烈的代码来查找它,而是让用户输入一个数字。
- 用户将输入一串由逗号分隔(分隔)的数字。 VBA中内置了一项功能 - [分割功能](https://msdn.microsoft.com/en-us/library/6x627e5f(v=vs.90).aspx) - 将分隔字符串转换为数组。
- 为了让用户可能想要多次添加数据,我们需要找到任何现有数据的底部,然后粘贴您的数据数组。
Sub FindMonth()
'Initialize Variables
Dim sht As Worksheet
Dim monthNumber As Integer
Dim monthNumberVar As Variant
Dim inputString As String
Dim inputArray As Variant
Dim rowNumber As Long
Dim i As Long
Dim j As Long
Set sht = ThisWorkbook.Sheets(1)
monthNumber = 0
'Prompt for month number
Do
monthNumberVar = InputBox("Please enter number of month", "Month")
'Make sure the input is a number
If IsNumeric(monthNumberVar) Then
monthNumber = Val(monthNumberVar)
Else
MsgBox "Please enter a NUMBER"
End If
If monthNumber < 1 Or monthNumber > 12 Then MsgBox "Please choose a number between 1 -12"
Loop While monthNumber < 1 Or monthNumber > 12
'Prompt for a list of the data//Turn that data into an array
inputString = InputBox("Please enter data seperated by commas", "Input")
inputArray = Split(inputString, ",")
'Find the first empty row in the column
i = 1
Do
rowNumber = i
i = i + 1
Loop Until sht.Cells(i, monthNumber).Value = ""
'Loop through the array and print out starting at row
For j = 0 To UBound(inputArray, 1)
sht.Cells(i, monthNumber) = inputArray(j)
i = i + 1
Next j
'Success Message
MsgBox "Data successfully placed"
End Sub
嗨,非常感谢您帮助我解决这个问题。我无法按照我想要的方式工作,但很高兴看到这样的代码写出来,所以我可以调整它来做我所需要的。我很感激 :) – Rob