【问题标题】:Displaying MsgBox when range of cells have not a specific length当单元格范围没有特定长度时显示 MsgBox
【发布时间】:2018-06-21 17:52:02
【问题描述】:

我有一个程序扫描标签并将该值放入单元格,但出于安全原因,有必要检查其长度是否始终相同(例如:8,标签=12345-78 ) 字符串中有一个“-”。我想让程序做的是,当扫描的标签有一个与这个不同的数字时,显示一个消息框,指示该数字无效,然后擦除单元格的内容。我真的很感激这方面的一些帮助。

这是我目前的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
'macro para prohibir longitud que no sea la seleccionada

Dim rango As Range


For Each Range In Worksheets("HojadeInspection").Range("I9:I20")


If rango.Len(c.Value) <> 8 Then

MsgBox "La longitud del código insertado no es la correcta", vbcrtical


End If



End Sub

【问题讨论】:

  • 数据,数据验证。
  • Stack Overflow 不是一个“为我编写代码”的网站...请展示您尝试过的内容以及您已经编写的任何代码。
  • 嗨,我尝试过数据验证,但是由于数据是粘贴到单元格中而不是输入的,所以它不起作用。
  • 我已经发布了我目前拥有的那个。

标签: excel msgbox vba


【解决方案1】:
Dim i As Integer

'I is the column I used, switch it to meet your needs

i = Worksheets("Sheet1").Range("I:I").Cells. _
     SpecialCells(xlCellTypeConstants).Count

If Not Len(Range("I" & CStr(i))) = 8 Then

MsgBox "Your Message Here", vbCritical
End If

End Sub

(根据原始回复编辑的代码)

【讨论】:

  • 它可以工作,但我正在制作的程序是这样工作的:我扫描一个标签,该数字进入单元格 I9,然后我扫描另一个,它进入 I10,依此类推。所以,有了这个程序,在插入第一个的那一刻,它会评估所有的范围,总是因为我没有填充其余的单元格而得到消息。有没有一种方法可以让我只有在单元格被填满后才能评估它们?另外,我的“Worksheet_Change”中有另一个宏,它会导致程序检测到名称不明确。
  • 这应该可以解决问题。您希望如何执行代码取决于您,但这会计算所有具有有效数据的单元格,然后转到具有最高整数坐标的单元格。它对我来说很好。 注意:这假设您的所有单元格中都有有效数据,因此请相应地计划
  • 由于某种原因,即使我引入一串 8 个数字,也会出现该消息。
  • 如果包含“-”,则需要将 8 更改为 9。
  • 不,我已经尝试过不使用它和其他组合。我认为问题出在变量“i”的定义中。
【解决方案2】:

试试这个:

Private Sub Worksheet_Change(ByVal Target As Range)
    'macro para prohibir longitud que no sea la seleccionada
    Dim forCell As Variant

    For Each forCell In Worksheets("HojadeInspection").Range("I9:I20")
        If Not forCell.Value Like "[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9]" Then
            MsgBox "La longitud del código insertado no es la correcta", vbcrtical
        End If
    Next
End Sub

【讨论】:

  • 我已经试过了,但是它检测到错误后,即使我关闭它,消息仍然无限出现。
  • 它不能无限出现,因为循环是有限的。因此消息最多可以弹出 12 次(与某个范围内的单元格一样多)。
  • 好的,我想我遇到了一个可能很容易改变的小问题。我制作了另一个宏来查找该数字并在数据库中重复时显示一条消息。这也存储为“private sub worksheet_change (ByVal target As Range) 有什么方法可以在不使用相同名称的情况下放置您制作的这个 sub,因为如果我重复它,会出现一条显示“模糊名称”的消息,但是如果我插入它而不放那个子,这个提到的错误会出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多