Excel VBA如何正确操作隐藏工作表执行公式填充
问题根因
- 代码中控制工作表显隐的属性拼写错误:你写的
.Visable是错误写法,正确属性名是Visible,拼写错误导致显隐逻辑完全不生效,这是隐藏工作表时代码无法运行的核心原因。 - 额外优化:操作隐藏工作表无需特意取消隐藏、也不需要调用
Select方法选中工作表,只要给所有Range对象明确绑定所属工作表,直接操作隐藏工作表也能正常执行,代码运行效率更高、也不会出现屏幕闪烁的问题。
修正后的优化代码(无需显式取消隐藏工作表)
Sub TestMacro() Dim ws As Worksheet Dim LastRow As Long ' 处理Whse工作表 Set ws = Sheets("Whse") With ws LastRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("K2") = "=IF(A2=1,J2,J2+K1)" .Range("K2:K" & LastRow).FillDown .Range("L2") = "=H2-K2" .Range("L2:L" & LastRow).FillDown .Range("M2") = "=IF(L2>0,J2,J2+L2)" .Range("M2:M" & LastRow).FillDown .Range("N2") = "=IF(M2>0,1,2)" .Range("N2:N" & LastRow).FillDown End With ' 处理AllWhse工作表 Set ws = Sheets("AllWhse") With ws LastRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("J2") = "=IF(A2=1,I2,I2+J1)" .Range("J2:J" & LastRow).FillDown .Range("K2") = "=G2-J2" .Range("K2:K" & LastRow).FillDown .Range("L2") = "=IF(K2>0,I2,I2+K2)" .Range("L2:L" & LastRow).FillDown .Range("M2") = "=IF(L2>0,1,2)" .Range("M2:M" & LastRow).FillDown End With ' 刷新工作簿 ActiveWorkbook.RefreshAll End Sub
如果你需要保留显式取消隐藏再隐藏的原有逻辑,只要把原有代码里所有的.Visable替换成.Visible即可正常运行。
内容的提问来源于stack exchange,提问作者Gray Meiring
相关产品推荐
相关产品推荐

