excel - 使用后组合框列表中的项目变灰,因此用户无法选择它们
问题描述
我有一个项目正在开发新位置的硬件部署。我有一个用户表单组合框,其中包含将分配给某些硬件项目(即信用卡机器)的 IP 地址列表。我试图找到一种方法,一旦选择使用其中一个 IP 地址,组合框列表中的项目要么被删除,要么变灰,用户无法重用。但是,如果由于某种原因 IP 重新可用,则该项目现在可以在列表中使用。硬件和 IP 和其他信息将添加到 Excel 中的表/数据库中。所以我假设我必须针对那个表/数据库来验证这个 IP 列表。但我不知道如何完成验证。我已经尝试过数据验证,但我想在基于组合框的 VBA 中进行验证。
这是输入 IP 地址组合框的当前代码。您可以输入单个 IP 或范围。
Private Sub Submit_Data_Click()
Dim wb As Workbook, ws As Worksheet, rngTarget As Range
Dim s1 As String, ip1 As Variant
Dim s2 As String, ip2 As Variant
Dim i As Integer, n As Integer
Set wb = ThisWorkbook
Set ws = wb.Sheets("Arrays")
Set rngTarget = ws.Range("I" & Rows.Count).End(xlUp)
If Me.Add_single_IP = True Then
s1 = Me.sgle_IP_add_tb1
s2 = s1
Else
s1 = Me.rge_IP_start_tb2
s2 = Me.Rge_IP_End_tb2
End If
' split string into bytes
ip1 = Split(s1, ".")
ip2 = Split(s2, ".")
' validate
Dim msg As String
If UBound(ip1) <> 3 Or UBound(ip2) <> 3 Then
msg = "IP must be n.n.n.n"
ElseIf ip1(3) > 255 Or ip2(3) > 255 Then
msg = "Host must be 1 to 255"
ElseIf ip1(3) > ip2(3) Then
msg = s1 & " is greater then " & s2
ElseIf ip1(0) <> ip2(0) Or ip1(1) <> ip2(1) Or ip1(2) <> ip2(2) Then
msg = "Different networks"
End If
' failed validation
If Len(msg) > 0 Then
MsgBox msg, vbCritical, s1 & "-" & s2
Exit Sub
End If
' calc range and write to sheet
n = ip2(3) - ip1(3) + 1
For i = 1 To n
Set rngTarget = rngTarget.Offset(1, 0) ' move down
rngTarget = Join(ip1, ".")
ip1(3) = ip1(3) + 1
Next
MsgBox n & " addresses added ", vbInformation, s1 & "-" & s2
End Sub
就像我之前所说的......如果我可以在分配 IP 时从选择中删除它们,这样我们就没有重复项,然后如果不再使用硬件部件就能够再次使其可用,那就太好了。如果它更容易,那么允许它仍然可见但在列表中显示为灰色,当然不允许选择它并向用户添加一个 MsgBox 错误,表明 IP 已在使用中也可以正常工作。
组合框应将可用/未使用的 IP 写入名为 MstrInv 的工作表上的数据库表中的列 M。
感谢您的任何帮助。
解决方案
从组合框的 RowSource 中删除 Column I 并在窗体初始化时添加所需的项目。
Private Sub UserForm_Initialize()
Dim ws As Worksheet, iLastRow As Long, i As Long
Set ws = ThisWorkbook.Sheets("Arrays")
Me.ComboBox1.Clear
iLastRow = ws.Cells(Rows.Count, "I").End(xlUp).Row
For i = 3 To iLastRow
If Len(ws.Cells(i, "H")) = 0 Then ' not assigned
Me.ComboBox1.AddItem ws.Cells(i, "I")
End If
Next
End Sub
推荐阅读
- reactjs - SVG 鼠标悬停时性能不佳
- django - 带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件
- inode - 在可以读取 inode N 的数据块之前必须读取多少块
- cassandra - 如何在 Cassandra 中创建表来维护层次结构?
- reactjs - React,Graphql CRUD 应用程序 - 删除突变删除列表中的第一个
- android - 菜单模板在 Android Studio 中显示不正确
- sqlalchemy - SQLAlchemy 哈希函数
- linux - 告诉我们是否在 WSL 中运行 linux?
- php - 如何使用三元运算符检查资产存储是否为空
- cygwin - Cygwin - 找不到标题