Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Excel 将变量数据值复制到列末尾时出现运行时错误1004_Excel_Vba - Fatal编程技术网

Excel 将变量数据值复制到列末尾时出现运行时错误1004

Excel 将变量数据值复制到列末尾时出现运行时错误1004,excel,vba,Excel,Vba,我试图连接给定行(比如C3:F3)中单元格的值,在同一行(在同一工作表上)中,转到被连接单元格左侧的第一个空单元格(比如B3)并输入连接的值。下面的代码第一次工作,但当下面的代码行运行时,我不断得到一个运行时错误1004ws.Range(“B3”).End(xlDown).Offset(1,0).Value=varConctnt,也就是说,选择了下一行的下一组单元格(比如C4:F4),我想在单元格B4中输入连接的值。我已经尽了最大努力声明对象来回避这个问题,但是错误不断出现 提前谢谢 Sub C

我试图连接给定行(比如C3:F3)中单元格的值,在同一行(在同一工作表上)中,转到被连接单元格左侧的第一个空单元格(比如B3)并输入连接的值。下面的代码第一次工作,但当下面的代码行运行时,我不断得到一个运行时错误1004
ws.Range(“B3”).End(xlDown).Offset(1,0).Value=varConctnt
,也就是说,选择了下一行的下一组单元格(比如C4:F4),我想在单元格B4中输入连接的值。我已经尽了最大努力声明对象来回避这个问题,但是错误不断出现

提前谢谢

Sub ConcatenateReal2()

Dim rng As Range, iRow As Integer, iCol As Integer, i As Integer

Dim ws As Worksheet

Set ws = ActiveSheet

    ws.Range("C3").Select

    Set rng = ActiveSheet.Range(ActiveCell.End(xlToRight), ActiveCell.End(xlDown))

Dim varConctnt As Variant

    For iRow = 1 To rng.Rows.Count

    For iCol = 1 To rng.Columns.Count

        If Not rng(iRow, iCol).Value = vbNullString Then

        varConctnt = varConctnt & "," & rng(iRow, iCol).Value

    End If

    Next iCol

    Range("B3").Activate

    If IsEmpty(ActiveCell) Then

        ActiveCell.Value = varConctnt

    Else

        ws.Range("B3").End(xlDown).Offset(1, 0).Value = varConctnt

    End If

    varConctnt = ""

skip1:

    Next iRow

End Sub
(未经测试)

(未经测试)


检查
varConctnt
的值,它可能为空。如果B3下面没有内容,则End(xlDown)将转到工作表的底部,并且不能从那里偏移1行。谢谢Tim!非常感谢!我选择了B2单元,它工作得非常好。我将尝试下面的代码,并让您知道它是如何运行的。它可能比我的效率高。另外,您对VBA学习资源有什么建议吗?请检查
varConctnt
的值。如果B3下面没有内容,则End(xlDown)将显示在工作表的底部,并且不能从那里偏移1行。谢谢Tim!非常感谢!我选择了B2单元,它工作得非常好。我将尝试下面的代码,并让您知道它是如何运行的。它可能比我的效率高。另外,你对VBA学习资源有什么建议吗?谢谢Tim,你的代码效率更高,更简单!任何学习VBA的技巧/资源都将不胜感激。谢谢Tim,你的代码效率更高,复杂度更低!如有任何关于学习VBA的提示/资源,将不胜感激。
Sub ConcatenateReal2()

    Dim rng As Range, c As Range
    Dim sep, rw as Range, v, s

    With ActiveSheet.Range("C3")
        Set rng = .Parent.Range(.End(xlToRight), .End(xlDown))
    End With

    For Each rw in rng.Rows     'loop over rows
        sep = "" 'reset separator 
        s = ""
        For Each c in rw.Cells
            v = c.value
            If Len(v) > 0 Then
                s = s & sep & v
                sep = ","    
            end if
        next c
        rw.cells(1).offset(0, -1).value = s 
    Next rw     

End Sub