代码中的if语句以填充表格

时间:2018-08-28 16:02:38

标签: excel vba excel-vba

我的工作簿中有两张纸。一个包含一个表单,另一个包含用于填充表单的数据。我能够编写一个小的宏,该宏使用Data中列A中的信息成功地循环并填充Range(“ B16:I16”)中的单元格Job Title。

我试图在VBA中编写一个If语句,该语句将根据Job Title中的文本填充Range(“ D14:H14”)中的单元格Employee Work Location(Building)。

我写了一些东西,但是似乎没有用。我收到不匹配错误。我可以帮忙吗?

谢谢!

Form Data

Sub FormPopulate_Click()
    Dim i As Integer
    Dim Building_Location as String
    For i = 2 To 3
        Sheets("Data").Select
        Range("A" & CStr(i)).Select
        ThisFile = Range("A" & CStr(i))
        Selection.Copy
        Sheets("Form").Select
        Range("B16:I16").Select
        ActiveSheet.Paste
        Sheets("Form").Select
        If Worksheets("Form").Range("B16:I16") = "Coordinator" Then
            Building_Location = "East Quad"
        Else
            Building_Location =""
        End If
        Sheets("Form").Range("D14:H14").Value = Building_Location
     Next i
   End Sub

2 个答案:

答案 0 :(得分:0)

这部分代码:
Selection.Copy Sheets("Form").Select Range("B16:I16").Select ActiveSheet.Paste

是指已经复制的单元格数据,但是此处已粘贴到某个范围?这不是(真正)范围,因为它是合并的单元格,所以引用应该是B16B16:B16

类似地,
If Worksheets("Form").Range("B16:I16") = "Coordinator" Then ...也应仅引用单个单元格,如上所述。

祝你好运。

答案 1 :(得分:0)

主要问题是您无法一次检查多个单元格的值。您正在使用...Range("B16:I16") = "Coordinator"进行此操作。而是使用类似COUNTIF()的东西。

Sub FormPopulate_Click()
Dim i       As Long
Dim Building_Location As String
Dim dataWS As Worksheet, formWS As Worksheet
Dim thisFile As Range, destRange As Range

Set dataWS = Sheets("Data")
Set formWS = Sheets("Form")
For i = 2 To 3
    Set thisFile = dataWS.Range("A" & i)
    Set destRange = formWS.Range("B16:I16")
    thisFile.Copy destRange

    If WorksheetFunction.CountIf(formWS.Range("B16:I16"), "Coordinator") = destRange.Cells.Count Then
        Building_Location = "East Quad"
    Else
        Building_Location = ""
    End If
    formWS.Range("D14:H14").Value = Building_Location
Next i
End Sub

另一个要注意的是,您将在每次迭代中覆盖formWS.Range("B16:I16")中的数据。可以吗?