当前位置: 代码迷 >> VBA >> 久别的VBA
  详细解决方案

久别的VBA

热度:6158   发布时间:2013-02-26 00:00:00.0
久违的VBA

一mm同学想在excel中使用这么个功能,在一个单元格,假设为A1,做一些选项,例如,洗车品牌型号,在它下面就显示对应的汽车参数,价格等数据。

?

本准备使用lookup,结果发现没能成功。最后还是转身强大的VBA,早年对VB比较熟悉过,所以VBA自然没啥问题,主要就是API的熟悉了。

?

实现方案:监控A1的变化,这需要用到Sub Worksheet_Change(ByVal Target As Range)这个内置的方法(事件),然后判断其address是否为A1,再根据值来做操作。本来是使用定位,但这样其它汽车信息也会显示出来,所以最终的方案是:第一行第一格即A1,放汽车品牌型号列表,然后冻结B1,这样第一行就不动了。当A1值变化时,将2-N行隐藏,这个N即所有数据将占据的行数。然后再把对应汽车品牌的参数信息所在行显示出来。这样,如果再加汽车品牌还是需要修改下VBA代码,但也比较简单了。

?

代码:

Const all As String = "a2:a500" '表示你所有的数据在2-500行,如果多的话可以自己修改'这里要定义产品,如果新增产品,只需要改这里!!!!!!!Public s10 As StringPublic s20 As StringPublic s30 As StringPublic s40 As StringPublic s50 As String'上面有几个产品这里也要写几个!!!!!!!Private Sub initVar()     s10 = "a2:a10"     s20 = "a11:a20"     s30 = "a21:a30"     s40 = "a31:a40"     s50 = "a41:a50"End Sub'=====================================以下的代码都不需要修改了================================='用来隐藏指定范围行Private Sub hideRow(rrng As String)    Set rng = Range(rrng)    rng.EntireRow.Hidden = TrueEnd Sub'用来显示指定范围行Private Sub showRow(rrng As String)   Set rng = Range(rrng)   rng.EntireRow.Hidden = FalseEnd Sub'控制某个单元格数据变化来做相应的操作,这里是隐藏或显示指定行Private Sub Worksheet_Change(ByVal Target As Range)    On Error GoTo showmsg    Call initVar        If Target.Address = "$A$1" Then        Call hideRow(all)        Dim myRows As String        myRows = CallByName(Me, Target.Value, VbGet)        Call showRow(myRows)    End If    Exit Subshowmsg:    MsgBox "可怜的程序不能处理您的操作,请检查数据!"End Sub
?
  相关解决方案