首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ActiveX命令按钮,如果输入了值,则取消隐藏单元格旁边的内容;如果单元格为空,则隐藏该按钮

ActiveX命令按钮,如果输入了值,则取消隐藏单元格旁边的内容;如果单元格为空,则隐藏该按钮
EN

Stack Overflow用户
提问于 2019-05-30 08:55:13
回答 2查看 172关注 0票数 2

我有80行代码,用户可以在column Ward下输入预定值。这将取消隐藏它旁边的一个按钮。单击它时,它会清空相邻的值,并根据原始值递增(+1)另一个工作表中的特定单元格。

目前,我在Ward单元格旁边有80个ActiveX按钮,可以根据Ward单元格的值隐藏/取消隐藏。我已经注意到,添加更多的按钮会降低电子表格的速度,因为我有大量的If Then语句。

If Range("F8").Value = 0 Then
  Sheets("Admissions").EDAdmit1.Visible = False
Else
  Sheets("Admissions").EDAdmit1.Visible = True
End If

If Range("L8").Value = 0 Then
  Sheets("Admissions").ElecAdmit1.Visible = False
Else
  Sheets("Admissions").ElecAdmit1.Visible = True
End If

If Range("F9").Value = 0 Then
  Sheets("Admissions").EDAdmit2.Visible = False
Else
  Sheets("Admissions").EDAdmit2.Visible = True
End If

If Range("L9").Value = 0 Then
  Sheets("Admissions").ElecAdmit2.Visible = False
Else
  Sheets("Admissions").ElecAdmit2.Visible = True
End If

。。诸若此类。

更不用说我每次点击按钮时的If Then语句了。

Private Sub EDAdmit1_Click()
If Range("F8") = "ICU" Then
    Worksheets("Overview").Range("AD11").Value = Worksheets("Overview").Range("AD11") + 1
ElseIf Range("F8") = "HDU" Then
    Worksheets("Overview").Range("AF11").Value = Worksheets("Overview").Range("AF11") + 1
ElseIf Range("F8") = "DPU" Or Range("F8") = "Other" Then
Else
    Col = WorksheetFunction.VLookup(Range("F8"), Range("U1:V27"), 2)
    Worksheets("Overview").Range(Col).Value = Worksheets("Overview").Range(Col).Value + 1
End If
Range("F8").ClearContents
End Sub

有没有更有效的方法来做到这一点?

录取名单:

EN

回答 2

Stack Overflow用户

发布于 2019-05-30 12:45:18

您可以考虑在Ward选择旁边的单元格中使用"admit“超链接:这样您只需要一个处理程序(工作表模块中的Worksheet_FollowHyperlink)。注在这里您需要使用Insert >> Hyperlink,而不是超级链接()公式类型的链接(因为基于公式的链接不会触发FollowHyperlink事件)。

您可以放弃隐藏/显示代码,而是使用条件格式来更改链接字体颜色,以便在没有选择Ward时隐藏链接。如果用户点击了其中一个隐藏的链接,那么你什么也不能做。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

    Dim rngSrc As Range, addr, ward

    Set rngSrc = Target.Range        '<< the cell with the link
    ward = rngSrc.Offset(0, 1).Value '<< cell with Ward

    'only do anything if a ward is selected
    If Len(ward) > 0 Then
        'find the cell to update
        Select Case ward
            Case "ICU"
                addr = "AD11"
            Case "HDU"
                addr = "AF11"
            Case "DPU", "Other"
                addr = ""
            Case Else
                addr = Application.VLookup(ward, Me.Range("U1:V27"), 2, False)
        End Select

        'if we have a cell to update then
        If Len(addr) > 0 Then
            With Worksheets("Overview").Range(addr)
                .Value = .Value + 1
            End With
        End If
        rngSrc.Offset(0, 1).ClearContents
    End If

    rngSrc.Select '<< select the clicked-on link cell
                  '   (in case the link points elsewhere)

End Sub
票数 1
EN

Stack Overflow用户

发布于 2019-05-30 09:19:50

在代码的开头放入下面这一行:

Application.ScreenUpdating = False

这将禁用所有屏幕更新。让代码进行更改,然后启用屏幕更新,您所做的所有更改都将显示出来。

Application.ScreenUpdating = True

禁用屏幕更新通常会加快代码的执行速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56370308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档