我的工作簿中有两张纸。一个包含一个表单,另一个包含用于填充表单的数据。我能够编写一个小的宏,该宏使用Data中列A中的信息成功地循环并填充Range(“ B16:I16”)中的单元格Job Title。
我试图在VBA中编写一个If语句,该语句将根据Job Title中的文本填充Range(“ D14:H14”)中的单元格Employee Work Location(Building)。
我写了一些东西,但是似乎没有用。我收到不匹配错误。我可以帮忙吗?
谢谢!
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
答案 0 :(得分:0)
这部分代码:
Selection.Copy
Sheets("Form").Select
Range("B16:I16").Select
ActiveSheet.Paste
是指已经复制的单元格数据,但是此处已粘贴到某个范围?这不是(真正)范围,因为它是合并的单元格,所以引用应该是B16
或B16: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")
中的数据。可以吗?