ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 有效期限筛选,2位的月份10,11,12不能正确识别,请帮忙看看代码哪里错误。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-7 15:55 | 显示全部楼层 |阅读模式
从日本得来的一个量具管理系统,由于乱码已经转换。但还是有问题,由于本人不懂VBA,还请大神们帮忙看看 代码哪里错误。


问题:进行量具的校正有效期限筛选时,还未到有效期限的10月,11月,12月被筛选为已过有效期限。1~9月份正常。

下面复制几段代码,请先判断一下,如果不能找到原因将上传附件(附件里也有很多日语部分说明)


'機能   :台帳詳細を台帳フォームに表示する
'引数   :
'戻り値 :
'**********************************************************
Public Sub ShowMeasDetails()

Const PROC_NAME As String = "clsMeasDetails/ShowMeasDetails"
   
On Error GoTo MyErr
    With frmLed
        .cboCat.Text = mCat
        .cboGroup.Text = mGroup
        .cboProductName.Text = mProductName
        .txtUsage.Text = mUsage
        .txtCreationDate.Text = FORMAT(mCreationDate, "yyyy/m/d")
        .txtRefeNo.Text = mRefeNo
        .txtUniqueNo1.Text = mUniqueNo1
        .txtUniqueNo2.Text = mUniqueNo2
        .cboManaClass.Text = mManaClass
        .txtCalCycle.Text = mCalCycle
        .txtExpDateYear.Text = FORMAT(mExpDate, "yyyy")
        .txtExpDateMonth.Text = FORMAT(mExpDate, "m")
        '有効期限残月表示
        Call ShowExpDateTimeLimit
        .txtRemarks.Text = mRemarks
        .txtMaker.Text = mMaker
        .txtModel.Text = mModel
        .txtScaleInterVal.Text = mScaleInterval
        .txtMeas.Text = mMeas
        .txtOthersSpec.Text = mOthersSpec
        Call basFrmLed.ShowRefeSign
        Call basFrmLed.ShowStandardCalCycle
    End With
    Exit Sub



Public Sub ShowExpDateTimeLimit()

    With frmLed
        If .txtExpDateYear.Text <> "" And .txtExpDateMonth.Text <> "" And _
           .lblExpDateErr.Visible = False Then
            Dim cColor As clsColor
            
            Set cColor = New clsColor
            .txtTimeLimit.Text = _
                DateDiff("m", Date, DateSerial(.txtExpDateYear.Text, .txtExpDateMonth.Text, 1))
            If .txtTimeLimit.Text >= 0 Then
                .txtTimeLimit.ForeColor = cColor.black
            Else
                .txtTimeLimit.ForeColor = cColor.red
            End If
        End If
    End With

End Sub




'**********************************************************
'機能   :台帳フォームをクリップボードに登録する
'引数   :
'戻り値 :
'**********************************************************
Public Sub RegisterFrmLedInClipBoard()

Const PROC_NAME As String = "basFrmLedClipBoard/RegisterFrmLedInClipBoard"
   
On Error GoTo MyErr
    Dim myWs As Worksheet   'クリップボードシート
    Dim myClm As Long       'クリップボードシート列
    Dim myExpDate As String '有効期限
   
    Set myWs = VBAProject.wsclipBoard
    myClm = GetWsClipBoardClm
    Call ClearClipBoard
    With frmLed
        myWs.Cells(WsClipRow.WsClipRow_CopyDate, myClm).Value = Date & " " & Time
        myWs.Cells(WsClipRow.WsClipRow_RefeNo, myClm).Value = .txtRefeNo.Text
        myWs.Cells(WsClipRow.WsClipRow_UniqueNo1, myClm).Value = .txtUniqueNo1.Text
        myWs.Cells(WsClipRow.WsClipRow_UniqueNo2, myClm).Value = .txtUniqueNo2.Text
        myWs.Cells(WsClipRow.WsClipRow_Cat, myClm).Value = .cboCat.Text
        myWs.Cells(WsClipRow.WsClipRow_Group, myClm).Value = .cboGroup.Text
        myWs.Cells(WsClipRow.WsClipRow_ProductName, myClm).Value = .cboProductName.Text
        myWs.Cells(WsClipRow.WsClipRow_Usage, myClm).Value = .txtUsage.Text
        myWs.Cells(WsClipRow.WsClipRow_Remarks, myClm).Value = .txtRemarks.Text
        myWs.Cells(WsClipRow.WsClipRow_ManaClass, myClm).Value = .cboManaClass.Text
        myWs.Cells(WsClipRow.WsClipRow_CalCycle, myClm).Value = .txtCalCycle.Text
        myExpDate = .txtExpDateYear.Text & "/" & .txtExpDateMonth.Text & "/1"
        If IsDate(myExpDate) = True Then
            myWs.Cells(WsClipRow.WsClipRow_ExpDate, myClm).Value = FORMAT(myExpDate, "yyyy/m")
        Else
            myWs.Cells(WsClipRow.WsClipRow_ExpDate, myClm).Value = .txtExpDateYear.Text & _
                                                                   .txtExpDateMonth.Text
        End If
        myWs.Cells(WsClipRow.WsClipRow_Maker, myClm).Value = .txtMaker.Text
        myWs.Cells(WsClipRow.WsClipRow_Model, myClm).Value = .txtModel.Text
        myWs.Cells(WsClipRow.WsClipRow_ScaleInterval, myClm).Value = .txtScaleInterVal.Text
        myWs.Cells(WsClipRow.WsClipRow_Meas, myClm).Value = .txtMeas
        myWs.Cells(WsClipRow.WsClipRow_OthersSpec, myClm).Value = .txtOthersSpec.Text
    End With
   
    GoSub Finally
    Exit Sub




'機能   :有効期限(年月)形式に設定する
'引数   :settingRng-設定範囲
'戻り値 :
'**********************************************************
Public Sub SetYYYYMType(ByVal settingRng As Range)

    Const YYYY_M_FORMAT As String = "yyyy.m"   '有効期限
   
    settingRng.NumberFormatLocal = YYYY_M_FORMAT

End Sub



TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-7 16:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
图片中2023.10 还未到有效期限也被筛选出来了。

筛选后截图

筛选后截图

TA的精华主题

TA的得分主题

发表于 2023-6-8 09:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
应该是时间判断的问题,可能跟格式有关,具体还是需要看附件,一步一步调试下就知道了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-8 10:28 | 显示全部楼层
caffish 发表于 2023-6-8 09:15
应该是时间判断的问题,可能跟格式有关,具体还是需要看附件,一步一步调试下就知道了

格式各种尝试了,之前格式是有些问题的,现在应该是正确的,我还是发一下附件吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-8 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上传附件,解压后需要重新链接,DB变更,更新后可以使用。
界面截图.png

量具管理系统.zip

454.15 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2023-6-8 11:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
下载运行后各种提示窗口,也看不懂是啥意思。盲猜一下:
image.png
是不是这个地方的问题?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-8 11:22 | 显示全部楼层
边缘码农 发表于 2023-6-8 11:08
下载运行后各种提示窗口,也看不懂是啥意思。盲猜一下:

是不是这个地方的问题?

运行前要先设置一下的,链接其他表格才能正常运行的
m是月份吧,应该没有问题或者改成什么格式呢/

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 09:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大神们帮忙解决一下呗

TA的精华主题

TA的得分主题

发表于 2023-6-9 15:12 | 显示全部楼层
能定位到问题,但是试了很多方法都无法解决,问题代码在如下的地方:
之所以会拉出来那么多不符合要求的清单,是因为比较的逻辑不对,目前这个程序的算法逻辑是,比如现在的标准时间是2023/6/1,清单比较的时候2023/10/1里月份的第一位是1,比6小,所以就判定符合,可以试一下当把这个日期变成2023/1/1的时候就不会有任何清单了,我一开始怀疑是时间格式被转成了字符串,按位比较所以错误,但是强制转换了以后问题还是依旧,其实即使是第二个条件,选定在几个月以内会过期的清单一样会出现这个问题,你可以试一下当选择3以下时都能拉出来清单,选到5就没有结果了,也是因为2023/11/1的计算又回到了月份第一位的那个逻辑。看别的大神怎么解决吧,SQL这块的语法我不太熟练
类模块clsSearchCond
“ If mExpDate <> "" Then
        If IsDate(mExpDate) = False Then
            mySql = mySql & "AND 有效期限 >=#" & mExpDate & "/1/1" & "# " & _
                            "AND 有效期限 <=#" & mExpDate & "/12/1" & "# "
        Else
            mySql = mySql & "AND 有效期限 =#" & mExpDate & "# "
            
        End If
    End If
    If mExpDateTerm <> "" Then
        Dim baseDate As Date    '基準有効期限
        
        baseDate = GetBaseExpDate
        mySql = mySql & "AND 有效期限 >=#" & baseDate & "# " & _
                        "AND 有效期限 <=#" & DateAdd("m", val(mExpDateTerm), baseDate) & "# "
        
    End If
    If mExpired <> "" Then
        mySql = mySql & "AND 有效期限 < #" & mExpired & "#"”


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-10 08:44 | 显示全部楼层
caffish 发表于 2023-6-9 15:12
能定位到问题,但是试了很多方法都无法解决,问题代码在如下的地方:
之所以会拉出来那么多不符合要求的清 ...

首先谢谢! 感觉您说的有道理,我也再仔细看看。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 13:25 , Processed in 0.035272 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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