Excel VBA:将用户输入粘贴到由用户决定的月份列中

时间:2017-09-11 17:26:04

标签: excel vba copy paste

我对VBA编程非常陌生,我整个下午都在谷歌上搜索如何做到这一点并且没有成功。

我有一个电子表格,其中包含1月至12月的列数。我要做的是让用户输入一些值并指定一个月应该粘贴该值。例如:1,2,3,4和10月。我希望10月份的专栏有1,2,3,4。

我的新手想法是输入一个带有值的两个字段,一个要求输入月份名称的字段。然后记录一个宏,复制月份的输入,使用查找功能查找与输入匹配的列,然后在下面的一行然后粘贴值。但是,由于单元格不是动态的,因此不会将其粘贴到正确的单元格中。

这是我一直在使用的代码部分以及问题出现的地方。但是我不认为这是最有效的。

  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

1 个答案:

答案 0 :(得分:0)

这可能适用于您正在做的事情。我试图评论该程序正在做什么来帮助您了解它是如何工作的。

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

- 然后用户将输入一个由逗号分隔(分隔)的数字字符串。 VBA内置了一个函数 - [Split Function](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