Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel ActiveX命令按钮,如果输入值,则在单元格旁边取消隐藏,如果单元格为空则隐藏_Excel_Vba - Fatal编程技术网

Excel ActiveX命令按钮,如果输入值,则在单元格旁边取消隐藏,如果单元格为空则隐藏

Excel ActiveX命令按钮,如果输入值,则在单元格旁边取消隐藏,如果单元格为空则隐藏,excel,vba,Excel,Vba,我有80行,用户可以在列Ward下输入预定值。这将取消隐藏它旁边的一个按钮。单击后,将清空相邻的值,并根据原始值增加另一张图纸中的特定单元格(+1) 目前,我在病房单元格旁边有80个ActiveX按钮,它们根据病房单元格的值隐藏/取消隐藏。我注意到添加更多的按钮会减慢电子表格的速度,因为我有大量的If-Then语句 If Range("F8").Value = 0 Then Sheets("Admissions").EDAdmit1.Visible = False Else Sheets

我有80行,用户可以在列Ward下输入预定值。这将取消隐藏它旁边的一个按钮。单击后,将清空相邻的值,并根据原始值增加另一张图纸中的特定单元格(+1)

目前,我在病房单元格旁边有80个ActiveX按钮,它们根据病房单元格的值隐藏/取消隐藏。我注意到添加更多的按钮会减慢电子表格的速度,因为我有大量的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
有没有更有效的方法

入场名单:


在代码的开头写下这一行:

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

Application.ScreenUpdating = True

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

可以考虑在Ward选择旁边的单元格中使用“Read”超链接:这样,您只需要一个处理程序(工作表模块中的WorkSueSuffExualLink)。注意:您需要使用

Insert>>Hyperlink
,而不是此处的Hyperlink()公式类型链接(因为基于公式的链接不会触发
FollowHyperlink
事件)

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

Private子工作表\u FollowHyperlink(ByVal目标作为超链接)
尺寸rngSrc As范围、地址、病房
设置rngSrc=Target.Range“0”,然后
'查找要更新的单元格
选择病例病房
“重症监护病房”病例
addr=“AD11”
案例“HDU”
addr=“AF11”
案例“DPU”、“其他”
addr=“”
其他情况
addr=Application.VLookup(沃德,Me.Range(“U1:V27”),2,假)
结束选择
'如果我们有一个单元格要更新
如果Len(addr)>0,则
带工作表(“概述”)。范围(地址)
.Value=.Value+1
以
如果结束
rngSrc.偏移量(0,1).ClearContents
如果结束

rngSrc。如果重复了
语句,请选择“而不是
”,将您的范围声明为
Dim rng as range:Set rng=range(“xx:xx”)
,然后只需在您的范围内循环…整洁!那纯粹是天才!现在我也有一个“转移”按钮,我没有在我原来的帖子中提到。在“传输”按钮/链接出现之前,需要两个病房输入。单击后,它从第一个病房带走-1,从第二个病房带走+1。为了说明这一点,我在原来的帖子中添加了第二个截图。我离开了一段时间-如果你还需要帮助,可以在下周看一看。我可以通过增加一个额外的病房补偿来做到这一点。现在,显然我需要防止最终用户删除这些超链接。因此,我尝试锁定整个工作表,但链接不起作用,除非我允许用户选择锁定的单元格。我希望用户能够单击超链接,但不能选择单元格。
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