【发布时间】:2016-11-13 03:38:16
【问题描述】:
以下 VBA 的作用和工作正常: - 我有几个表,并为每个表使用了命名范围。 - 然后,在另一个选项卡(代码所在的位置)上,我有两个下拉列表,以便我的 Excel 报告的用户可以选择他们想要显示数据的表(一次只能一个)。
我的问题是,如果我从下拉列表中选择一个有 30 行的表格,一切看起来都很好 - 表格目标单元格 A2。但是,如果然后我选择一个只有 10 行的表,那么 10 行的新表将覆盖在之前的 30 行表上,但是 10 行表下的 20 行(从 30 行表中剩余)仍然存在。
我的问题是: 我应该如何更改下面的代码,以便从下拉列表中选择 10 rwo 表时不会出现上表中的 20 行?
如果上述内容没有意义,请告诉我。非常感谢。
我当时的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tableName As String
Dim tableRange As Range
Dim TypeOfCosts As String
Application.EnableEvents = False
If Range("B1").Text = "Fixed Staff Costs" Then
TypeOfCosts = "_Fixed_Staff"
ElseIf Range("B1") = "Variable Staff Costs" Then
TypeOfCosts = "_Variable_Staff"
ElseIf Range("B1") = "Production Costs" Then
TypeOfCosts = "_Production"
ElseIf Range("B1") = "Infrastructure Costs" Then
TypeOfCosts = "_Infrastructure"
ElseIf Range("B1") = "Other Costs" Then
TypeOfCosts = "_Other"
Else
TypeOfCosts = ""
End If
tableName = Range("A1").Text & TypeOfCosts & "_Costs"
On Error Resume Next
Set tableRange = Application.Range(tableName)
Debug.Print ThisWorkbook.Names.Count
If Not (tableRange Is Nothing) And Err = 0 Then
tableRange.Copy Destination:=Range("A3")
Else
Err.Clear
End If
On Error GoTo 0
Application.EnableEvents = True
End Sub
【问题讨论】:
-
Range("A3").CurrentRegion.ClearContents在复制其他范围之前,只要现有表周围有空白空间(并且只要存在现有表)。这实际上取决于工作表的其余部分是什么样的,以及您的所有表格是否都是某种可预测的大小/布局等 -
谢谢,但我究竟需要在哪里添加您上面建议的代码行?
-
嗯,您的代码似乎不起作用..有什么想法吗?
-
所有桌子的宽度/高度都相似吗?他们下面有什么吗?如果没有其他内容可以清除,那么(例如)
Range("A3").Resize(1000,10).ClearContents将清除从 A3 开始的 100 行和 10 列。如果您调整这些数字,以便范围始终覆盖您的表格,那么您应该没问题。 -
抱歉打扰了,但我需要明天提交这份报告,我已经走到了死胡同。。类似于下面来自 Thomas 的代码,这只是删除了上表的内容,但格式为未删除,例如在新表下的 20 行蓝色空单元格。你能想到别的吗?提前致谢
标签: vba