我有一张包含住宅地址数据行的主表单,其中一列是“状态”列。我在同一份文件中有50张其他纸张,对应于美国50个州中的每一张。我想要发生的事情:当我在主表单中输入地址并输入状态(例如“CA”或“California”)时,我希望它自动使用该地址填充“CA”表。谢谢!
答案 0 :(得分:1)
这里有几个假设:
1)State字段是最后填写的字段,因此一旦您进入状态,您可以立即将地址复制到正确的工作表。
2)您输入带有缩写的州,并且您的工作表的名称与州缩写完全匹配。
3)状态工作表的数据是连续的,从A1开始。
Private Sub Worksheet_Change(ByVal Target As Range)
Const lngSTATECOLUMN As Long = 6
Dim wks As Worksheet
Dim lngNextAvailableRow As Long
' check that only a single cell is being changed '
If Target.Areas.Count = 1 And Target.Cells.Count = 1 Then
' check that the cell being edited is in the state column '
If Not Intersect(Target, Columns(lngSTATECOLUMN)) Is Nothing Then
' check that a two-character entry has been made in the state column '
If Len(Target.Value) = 2 Then
' turn off error checking in case it cannot find a matching worksheet '
On Error Resume Next
Set wks = ThisWorkbook.Worksheets(Target.Value)
On Error GoTo 0
' continue if it found a worksheet with the same name as the state you input '
If Not wks Is Nothing Then
lngNextAvailableRow = wks.Range("a1").CurrentRegion.Rows.Count + 1
ActiveSheet.Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Copy _
wks.Range("A" & lngNextAvailableRow)
End If
End If
End If
End If
End Sub
但是,我会问为什么你需要在50个不同的工作表中复制你的数据?这似乎非常低效并且容易出错。除非您出于非常具体的原因需要这样做,否则我 非常强烈 建议不要这样做。
如果您在某些时候需要显示或使用单独的状态地址,那么我会查看过滤主要的地址列表。