Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
VBA拆分函数不允许为空_Vba_Ms Access - Fatal编程技术网

VBA拆分函数不允许为空

VBA拆分函数不允许为空,vba,ms-access,Vba,Ms Access,我是一个noob,需要帮助我如何更改代码以允许null,因为会有null值。我从另一篇文章中提取了这段代码,并对其进行了调整以符合我的目的。我正在创建一个表,并将代码从一个表拆分为一个零件,然后将它们拆分为已创建的表,拆分为一个零件。它在脚本的codelist=split(!code,,)部分持续显示错误无效使用null。零件表中的“代码”字段可能有多个代码,这些代码用逗号分隔,没有空格。我想把它们分成几行 之前: 之后: 代码如下: Sub split() Dim dbb As

我是一个noob,需要帮助我如何更改代码以允许null,因为会有null值。我从另一篇文章中提取了这段代码,并对其进行了调整以符合我的目的。我正在创建一个表,并将代码从一个表拆分为一个零件,然后将它们拆分为已创建的表,拆分为一个零件。它在脚本的codelist=split(!code,,)部分持续显示错误无效使用null。零件表中的“代码”字段可能有多个代码,这些代码用逗号分隔,没有空格。我想把它们分成几行

之前:

之后:

代码如下:

Sub split()


    Dim dbb As DAO.Database
    Dim tdff As DAO.TableDef
    Dim fldd As Field
    Set dbb = CurrentDb()
    Set tdff = db.CreateTableDef("SplitCodes_Part")
    Set flddA = tdff.CreateField("ID", dbText, 250)
    Set flddB = tdff.CreateField("Bookid", dbText, 250)
    Set flddC = tdff.CreateField("Imagefile", dbText, 250)
    Set flddD = tdff.CreateField("Code", dbText, 250)
    Set flddE = tdff.CreateField("ext_Remark", dbText, 250)
    flddE.AllowZeroLength = True
    tdff.Fields.Append flddA
    tdff.Fields.Append flddB
    tdff.Fields.Append flddC
    tdff.Fields.Append flddD
    tdff.Fields.Append flddE
    tdff.Fields.Refresh
    dbb.TableDefs.Append tdff
    dbb.TableDefs.Refresh

    Dim rss As DAO.Recordset
    Dim rss_out As DAO.Recordset
    Dim x As Long
    Dim SplitCodes() As Variant

    Set rss = CurrentDb.OpenRecordset("SELECT id, bookid, imagefile, code, ext_remark from part")
    Set rss_out = CurrentDb.OpenRecordset("SplitCodes_Part")
    With rss
        Do
            CodeList = Split(!Code, ",")
            For x = LBound(CodeList) To UBound(CodeList)
                rss_out.AddNew
                rss_out!Code = CodeList(x)
                rss_out!imagefile = rss!imagefile
                rss_out!bookid = rss!bookid
                rss_out!id = rss!id
                rss_out!EXT_REMARK = rss!EXT_REMARK
                rss_out.Update
                rss_out.AddNew

            Next x
            .MoveNext
        Loop Until .EOF
    End With
    rss_out.Close
    Set rs_out = Nothing
    rss.Close
    Set rss = Nothing
    dbb.TableDefs.Refresh



End Sub

筛选出具有空代码的记录:


如果发生这种情况,你希望发生什么!代码为空?如果有一个值,则输出一行,如果中有多个值!代码,每个值一行。那么,如果中没有值,会发生什么呢!代码,一行,没有行,还有什么?CodeList=Split(!Code&“,”,”)如果您只是希望它在没有内容时不会出错……CodeList不是声明的变量,splitcode是。模块标题中是否有显式选项?您可以使用
NZ
函数来避免空值。如果为空,我希望它跳过记录并移动到下一个。一旦我开始工作,我会尝试这些建议。谢谢大家的建议!我将null添加到select查询和代码&“”,但我得到了一个新错误“NO CURRENT RECORD”,表中有一条记录。使用:Do Until.EOFTo为具体起见,它突出显示codelist=Split(!code&“”,“,”),并声明错误。它有LOOP Until.EOF..我应该把它放在其他地方吗?弄明白了。必须创建一个if语句,如果没有代码,则跳过它。
Set rss = CurrentDb.OpenRecordset("Select ID, Bookid, Imagefile, Code, ext_remark From part Where Code Is Not Null")