复制单元格的内容时,vba崩溃

我试图build立一个Excel电子表格function像数据库(用户没有MS Access等)我有第二个工作表设置为数据透视表来分析数据logging。

为了确保用户拼写名称的一致性,我build立了一个名称已被使用过的查找列。 如果检测到无法识别的名称,则在查找列表上使用数据validation来要求用户确认拼写,或者指出这是要添加到系统中的新名称。

然后,我想要代码将名称复制到查找列,并更改另一列的状态,该列控制用户可以填写的列。这一位正在崩溃代码。

我已经粘贴了下面的子集作为评论设置的有问题的位。

Private Sub Worksheet_Change(ByVal Target As Range) ActiveSheet.Unprotect Dim row As Integer Dim emptyrow As Integer Dim prevrow As Integer For emptyrow = 3 To 20000 If ActiveSheet.Cells(emptyrow, 1).Text = "" Then row = emptyrow - 1 prevrow = row - 1 ActiveSheet.Range(Cells(emptyrow, 2), Cells(emptyrow, 26)).Locked = True If row > 2 Then ActiveSheet.Cells(row, 1).Locked = False ActiveSheet.Range(Cells(row, 2), Cells(row, 26)).Locked = True End If If prevrow > 2 Then ActiveSheet.Range(Cells(prevrow, 1), Cells(prevrow, 26)).Locked = True ' If ActiveSheet.Cells(row, 4).Text = "Y" Then ' ActiveSheet.Cells(row, 1).Locked = False ' ActiveSheet.Cells(row, 1).Text = "Add/update person" ' ActiveSheet.Cells(row, 29).Locked = False ' ActiveSheet.Cells(row, 29).Text = ActiveSheet.Cells(row, 3).Text ' End If If ActiveSheet.Cells(row, 1).Text = "Add/update person" Then ActiveSheet.Range(Cells(row, 17), Cells(row, 26)).Locked = True ActiveSheet.Range(Cells(row, 2), Cells(row, 16)).Locked = False ActiveSheet.Cells(row, 23).Locked = False ActiveSheet.Cells(emptyrow, 1).Locked = False ElseIf ActiveSheet.Cells(row, 1).Text = "Signposting" Then ActiveSheet.Range(Cells(row, 2), Cells(row, 26)).Locked = True ActiveSheet.Range(Cells(row, 2), Cells(row, 5)).Locked = False ActiveSheet.Range(Cells(row, 17), Cells(row, 18)).Locked = False ActiveSheet.Cells(row, 23).Locked = False ActiveSheet.Cells(emptyrow, 1).Locked = False ElseIf ActiveSheet.Cells(row, 1).Text = "Referral" Then ActiveSheet.Range(Cells(row, 2), Cells(row, 26)).Locked = True ActiveSheet.Range(Cells(row, 2), Cells(row, 5)).Locked = False ActiveSheet.Range(Cells(row, 19), Cells(row, 20)).Locked = False ActiveSheet.Cells(row, 23).Locked = False ActiveSheet.Cells(emptyrow, 1).Locked = False ElseIf ActiveSheet.Cells(row, 1).Text = "Training" Then ActiveSheet.Range(Cells(row, 2), Cells(row, 26)).Locked = True ActiveSheet.Range(Cells(row, 2), Cells(row, 5)).Locked = False ActiveSheet.Range(Cells(row, 21), Cells(row, 23)).Locked = False ActiveSheet.Cells(emptyrow, 1).Locked = False End If ActiveSheet.Cells(row, 23).Locked = False ActiveSheet.Cells(emptyrow, 1).Locked = False emptyrow = 20000 End If Next emptyrow ActiveSheet.Protect End Sub 

我相信问题是使用.Text设置一个单元格的值。 文本属性返回或设置对象的文本。 您可以检查一个单元格是否包含某些文本(如“Y”),但不能按照设置的方式将文本添加到单元格中。
我认为这应该工作:

 If ActiveSheet.Cells(Row, 4) = "Y" Then ActiveSheet.Cells(Row, 1).Locked = False ActiveSheet.Cells(Row, 1) = "Add/update person" ActiveSheet.Cells(Row, 29).Locked = False ActiveSheet.Cells(Row, 29) = ActiveSheet.Cells(Row, 3) End If If ActiveSheet.Cells(Row,4).Text = "Y" Then 

应该工作,但似乎是多余的。

也许你得到错误“无法设置范围类的文本值”。 这是因为text属性是只读的,所以应该使用value属性。

  ' ActiveSheet.Cells(row, 29).Locked = False ' ActiveSheet.Cells(row, 29).value= ActiveSheet.Cells(row, 3).Text