Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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_Excel - Fatal编程技术网

代码vba在第一个空格中停止处理单元格

代码vba在第一个空格中停止处理单元格,vba,excel,Vba,Excel,我的代码有一个小问题,当我刚刚测试它的时候,它可以正常工作,但是当我把它放到实际工作中时,我遇到了一个我无法解决的问题 代码将2列与其他2列进行比较,并将结果存储在其他3列中问题在于,当他从单元格复制数据时,当字符之间出现空白时,他会停止,因此它只复制第一个单词。例如,如果我有“始终需要空气批准”,他只复制“空气”,而不复制孔链。请提供帮助请允许我解决此问题,并提前向您表示感谢 Sub comparer() Dim Derlig As Long, Lig As Long, Ref As Stri

我的代码有一个小问题,当我刚刚测试它的时候,它可以正常工作,但是当我把它放到实际工作中时,我遇到了一个我无法解决的问题

代码将2列与其他2列进行比较,并将结果存储在其他3列中问题在于,当他从单元格复制数据时,当字符之间出现空白时,他会停止,因此它只复制第一个单词。例如,如果我有“始终需要空气批准”,他只复制“空气”,而不复制孔链。请提供帮助请允许我解决此问题,并提前向您表示感谢

Sub comparer()
Dim Derlig As Long, Lig As Long, Ref As String
Dim T_ab, D_ab As Object, T_cd, D_cd As Object
Dim T_fgh, Cptr As Long, Separ
Dim start As Single

    start = Timer
    Application.ScreenUpdating = False

    Range("E2:G30000").Clear

    Set D_ab = CreateObject("scripting.dictionary")
     Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    T_ab = Range("A2:B" & Derlig)
    For Lig = 1 To UBound(T_ab)
        Ref = T_ab(Lig, 1) & " " & T_ab(Lig, 2)
        If Not D_ab.exists(Ref) Then D_ab.Add Ref, ""
    Next
    T_ab = D_ab.keys

    Set D_cd = CreateObject("scripting.dictionary")
     Derlig = Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row
    T_cd = Range("C2:D" & Derlig)
    For Lig = 1 To UBound(T_cd)
        Ref = T_cd(Lig, 1) & " " & T_cd(Lig, 2)
        If Not D_cd.exists(Ref) Then D_cd.Add Ref, ""
    Next
    T_cd = D_cd.keys


    ReDim T_fgh(3, 0) 
    For Lig = 0 To UBound(T_ab)
        If Not D_cd.exists(T_ab(Lig)) Then
            Separ = Split(T_ab(Lig))
            ReDim Preserve T_fgh(3, Cptr)
            T_fgh(0, Cptr) = Separ(0)
            T_fgh(1, Cptr) = Separ(1)
          Cptr = Cptr + 1
        End If
    Next

    For Lig = 0 To UBound(T_cd)
        If Not D_ab.exists(T_cd(Lig)) Then
            Separ = Split(T_cd(Lig))
            ReDim Preserve T_fgh(3, Cptr)
            T_fgh(0, Cptr) = Separ(0)
            T_fgh(2, Cptr) = Separ(1)
          Cptr = Cptr + 1
        End If
    Next

    Range("F2").Resize(Cptr, 3) = Application.Transpose(T_fgh)
    Derlig = Range("E2:H100000").Find(what:="*", searchdirection:=xlPrevious).Row
    Range("F2:H" & Derlig).Borders.Weight = xlThin

    Application.ScreenUpdating = True
    MsgBox "comparaison efffectuée en " & Timer - start & " secondes"

End Sub

对于所有感兴趣的人来说,这是问题的解决方案,这很容易,但一开始我看不到它,我只需要在Separ=Split(t_cd(Lig),“·”)中添加“·来完成所有的链

我首先要正确地标注变量的尺寸,并给出它们可以理解的名称。目前,您正在使用变体,阅读起来非常尴尬。您好,谢谢您的回复,但我不明白您的意思是什么?
将t_ab、D_ab作为对象
<这会创建一个
变体
和一个
对象
,因为它们没有正确声明。另外,像
T_ab
D_ab
这样的东西对我们来说并不意味着任何东西,这使您的代码难以阅读。这是一个指向我的文件的链接,如果这有助于T_ab和D_ab是列“a”和列“b”之间的串联,对于列C和D也是一样的