2017-09-11 35 views
0

我对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 

回答

0

这应该可能适用于你正在做的事情。我试图评论该计划的作用,以帮助您了解它的工作原理。

- 大多数人可以很快地将一个月转换成一个数字,所以我没有写一个强烈的代码来查找它,而是让用户输入一个数字。

- 用户将输入一串由逗号分隔(分隔)的数字。 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 
+0

嗨,非常感谢您帮助我解决这个问题。我无法按照我想要的方式工作,但很高兴看到这样的代码写出来,所以我可以调整它来做我所需要的。我很感激 :) – Rob