Excel VBA Range.Value是Variant而不是String

我有一个启用macros的Excel工作簿,当它启动时,它编辑了一些单元格,并且我有一个更改事件,现在我希望更改事件不会在启动时运行,而是在用户进行更改时运行,因为当它发生时, target.value成为一个变体,因此崩溃时,分配值的stringvariables,这里是代码:

If Not Intersect(Target, Range("H83:H102,K83:K102,N83:N102,Q83:Q102,T83:T102,W83:W102,Z83:Z102,AC83:AC102")) Is Nothing Then Dim rowNum As Integer rowNum = Target.row Dim family As String family = Target.Offset(0, -1).Value Dim selection As String selection = "G" & rowNum & ",J" & rowNum & ",M" & rowNum & ",P" & rowNum & ",S" & rowNum & _ ",V" & rowNum & ",Y" & rowNum & ",AB" & rowNum Select Case family Case "FAMILY 1" Call validateFamMembers(Target, selection, family, "C64") Case "FAMILY 2" Call validateFamMembers(Target, selection, family, "I64") Case "FAMILY 3" Call validateFamMembers(Target, selection, family, "O64") Case "FAMILY 4" Call validateFamMembers(Target, selection, family, "U64") Case "FAMILY 5" Call validateFamMembers(Target, selection, family, "C76") Case "FAMILY 6" Call validateFamMembers(Target, selection, family, "I76") Case "FAMILY 7" Call validateFamMembers(Target, selection, family, "O76") Case "FAMILY 8" Call validateFamMembers(Target, selection, family, "U76") End Select End If 

代码在启动时在这一行崩溃

 family = Target.Offset(0, -1).Value 

我该如何处理 提前致谢

我认为你的问题发生在你select第一列时。 它由于偏移量而爆炸,因为它在第一个之后不能达到-1列。

编辑:

在评论中回答:您使用目标。 因此,如果你select更多的细胞,更多的细胞在目标中。 而多个单元格不能转换为string,因为它们是一个变体。