ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1947|回复: 10

[求助] MSGBOX确定和取消,决定数据的录入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-6 15:12 | 显示全部楼层 |阅读模式
求:修改代码后,达到:


在MSGBOX确定时,才录入数据到表格,如果点取消,刚不录入数据,也不退出,仍停留在列表框

如图

对话框.png

工时查询录入.zip

159.03 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2022-12-6 15:23 | 显示全部楼层
     MsgBox .List(0, 2) & ":" & .List(.ListIndex, 2) & vbCrLf _
            & .List(0, 3) & ":" & .List(.ListIndex, 3) & vbCrLf _
            & .List(0, 4) & ":" & .List(.ListIndex, 4) & vbCrLf _
            & .List(0, 5) & ":" & Format(.List(.ListIndex, 5), "#,###0.00") & vbCrLf _
            & .List(0, 6) & ":" & .List(.ListIndex, 6) & vbCrLf _
            & .List(0, 7) & ":" & .List(.ListIndex, 7), vbOKCancel, "工时要素"


msgbox本来就是关闭的时候就不会影响其他窗口的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-6 15:58 | 显示全部楼层
tennicse 发表于 2022-12-6 15:23
MsgBox .List(0, 2) & ":" & .List(.ListIndex, 2) & vbCrLf _
            & .List(0, 3) & ":" & ...

不是的,关闭了还是录入了。应该要加一个if,但我试了加几个地方,都加不了

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-6 16:01 | 显示全部楼层
    response = MsgBox("是否录入该工时?", vbExclamation + vbYesNo, "工时要素") _我在这里添加yesORno,但报错了
     .List(0, 2) & ":" & .List(.ListIndex, 2) & vbCrLf _
            & .List(0, 3) & ":" & .List(.ListIndex, 3) & vbCrLf _
            & .List(0, 4) & ":" & .List(.ListIndex, 4) & vbCrLf _
            & .List(0, 5) & ":" & Format(.List(.ListIndex, 5), "#,###0.00") & vbCrLf _
            & .List(0, 6) & ":" & .List(.ListIndex, 6) & vbCrLf _
            & .List(0, 7) & ":" & .List(.ListIndex, 7)

以下这两句,不知要加在哪里
逻辑没整明白
             If response = vbNo Then
             Else

TA的精华主题

TA的得分主题

发表于 2022-12-6 21:31 | 显示全部楼层
Sub msgTest()
    Dim response As VbMsgBoxResult

    response = MsgBox("是否录入该工时?", vbExclamation + vbYesNo, "工时要素")  ' _我在这里添加yesORno,但报错了
'     .List(0, 2) & ":" & .List(.ListIndex, 2) & vbCrLf _
'            & .List(0, 3) & ":" & .List(.ListIndex, 3) & vbCrLf _
'            & .List(0, 4) & ":" & .List(.ListIndex, 4) & vbCrLf _
'            & .List(0, 5) & ":" & Format(.List(.ListIndex, 5), "#,###0.00") & vbCrLf _
'            & .List(0, 6) & ":" & .List(.ListIndex, 6) & vbCrLf _
'            & .List(0, 7) & ":" & .List(.ListIndex, 7)
'
'以下这两句,不知要加在哪里
'逻辑没整明白
'             If response = vbNo Then
'             Else

    If response = vbYes Then
        MsgBox "You Click Yes"
    Else
        MsgBox "You Click No"
    End If

    '或者这个也可以。

    If MsgBox("是否录入该工时?", vbExclamation + vbYesNo, "工时要素") = vbYes Then
        MsgBox "You Click Yes"
    Else
        MsgBox "You Click No"
    End If



End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-6 21:37 | 显示全部楼层
tennicse 发表于 2022-12-6 21:31
Sub msgTest()
    Dim response As VbMsgBoxResult

知道是这么个理,但不懂要放在哪一行,才能使数据录入和不录入

TA的精华主题

TA的得分主题

发表于 2022-12-6 21:41 | 显示全部楼层
If MsgBox("是否录入该工时?", vbExclamation + vbOkCancel, "工时要素") = vbCancel Then Exit Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-6 21:58 | 显示全部楼层
tennicse 发表于 2022-12-6 21:41
If MsgBox("是否录入该工时?", vbExclamation + vbOkCancel, "工时要素") = vbCancel Then Exit Sub

我不是单纯的只要yes or  no

我自己倒腾了下,但无论点是还是否,都不会录入数据了,应该是位置不对

代码:

Private Sub ListBox1_Click()
    Dim r, j
    With ListBox1
     MsgBox .List(0, 2) & ":" & .List(.ListIndex, 2) & vbCrLf _
            & .List(0, 3) & ":" & .List(.ListIndex, 3) & vbCrLf _
            & .List(0, 4) & ":" & .List(.ListIndex, 4) & vbCrLf _
            & .List(0, 5) & ":" & Format(.List(.ListIndex, 5), "#,###0.00") & vbCrLf _
            & .List(0, 6) & ":" & .List(.ListIndex, 6) & vbCrLf _
            & .List(0, 7) & ":" & .List(.ListIndex, 7) & vbCrLf _
            & vbCrLf _
            & vbCrLf _
            & "是否录入该工时?", vbExclamation + vbYesNo, "工时要素"
            
    End With

    If response = vbYes Then
            
    With ActiveSheet
        r = .Range("f" & Range("F:F").Find("合计").Row).End(xlUp).Row + 1
         
        For j = 1 To 4
            .Cells(r, j) = ListBox1.List(ListBox1.ListIndex, j - 1)
        Next
        For j = 6 To 7
            .Cells(r, j) = ListBox1.List(ListBox1.ListIndex, j - 2)
        Next
    End With
    Else
    response = vbNo
    End If

End Sub

TA的精华主题

TA的得分主题

发表于 2022-12-7 15:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Private Sub ListBox1_Click()
    Dim r, j
    With ListBox1
     MsgBox ...., , "工时要素"
    End With
    With ActiveSheet
        balabala
    End With
    'Unload Me
End Sub

分析一下你最开始这个代码啊,你看看:
msgbox和 activesheet 修改前后是没有关联的,测试也是这样,msgbox显示不管按得什么按钮,甚至删掉这个msgbox,都不影响后续对ActiveSheet的修改
所以,要实现msgbox的选择有效性,就要把对ActiveSheet的修改放到对Msgbox结果的判断
就是:
if Msgb=vbYes Then
    修改工作表
end if

也就是你后来改的这一段:
    If response = vbYes Then            
    With ActiveSheet
        balalbala
    End With
    Else
        response = vbNo
    End If

但这一段中,Else是多余的,因为如果If判断了response <> vbYes,那么response一定就是vbNo,所以这个else再对response赋值,第一是多余的重复赋值,第二是赋值之后没有用到这个值。因此仅仅保留If Then Endif 就可以。

TA的精华主题

TA的得分主题

发表于 2022-12-7 15:28 | 显示全部楼层
Private Sub ListBox1_Click()
    Dim r, j
    With ListBox1
     MsgBox ...., , "工时要素"
    End With
    With ActiveSheet
        balabala
    End With
    'Unload Me
End Sub

分析一下你最开始这个代码啊,你看看:
msgbox和 activesheet 修改前后是没有关联的,测试也是这样,msgbox显示不管按得什么按钮,甚至删掉这个msgbox,都不影响后续对ActiveSheet的修改
所以,要实现msgbox的选择有效性,就要把对ActiveSheet的修改放到对Msgbox结果的判断
就是:
if Msgb=vbYes Then
    修改工作表
end if

也就是你后来改的这一段:
    If response = vbYes Then            
    With ActiveSheet
        balalbala
    End With
    Else
        response = vbNo
    End If

但这一段中,Else是多余的,因为如果If判断了response <> vbYes,那么response一定就是vbNo,所以这个else再对response赋值,第一是多余的重复赋值,第二是赋值之后没有用到这个值。因此仅仅保留If Then Endif 就可以。
然后你提问,说不管怎么折腾,都不会改动了,那是因为,你的response没有接受Msgbox的返回值啊亲!
   response=MsgBox (...., , "工时要素")
要这样啊!
但是这样,就有个中间变量response,实际上是多余了。
所以,兜兜转转就是回到了我前面告诉你的:




Private Sub ListBox1_Click()
    Dim r, j
    With ListBox1
     if MsgBox( ...., , "工时要素")=vbYes Then
           ActiveSheet.balabala       '这里不能再用With了,因为已经嵌套进了With
      end if
    End With
    'Unload Me
End Sub



评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 12:31 , Processed in 0.040877 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表