即使之前的行是空的,也要插入

时间:2013-08-20 18:43:45

标签: excel-vba vba excel

我在表单中有这个表单,它有一个带宏的命令按钮。 当我单击它时,它会将Sheet1单元格中的所有数据插入到sheet2中的单行中。 我已经放下了下一个空行命令,但我希望所有数据仍然在同一行,即使前一行是空的。

我使用了以下代码:

    Sub Botao()
    Dim ws1, ws2 As Worksheet
    Dim código, tipo, textobrevematerial, codigopa, textobrevepa, ncm, versão, motivo1, motivo2, motivo3, datarecebimento, _
        dataimpressao, datamkt, datarevisor, datasedev, dataar, datart, dataredmkt, dataredsedev As Range

        Set ws1 = Worksheets("Plan1")
        Set ws2 = Worksheets("Plan2")
        Set código = ws2.Cells(Rows.Count, "a").End(xlUp)
        Set datarecebimento = ws2.Cells(Rows.Count, "b").End(xlUp)
        Set tipo = ws2.Cells(Rows.Count, "c").End(xlUp)
        Set textobrevematerial = ws2.Cells(Rows.Count, "d").End(xlUp)
        Set codigopa = ws2.Cells(Rows.Count, "e").End(xlUp)
        Set textobrevepa = ws2.Cells(Rows.Count, "f").End(xlUp)
        Set ncm = ws2.Cells(Rows.Count, "g").End(xlUp)
        Set versão = ws2.Cells(Rows.Count, "h").End(xlUp)
        Set dataimpressão = ws2.Cells(Rows.Count, "i").End(xlUp)
        Set datamkt = ws2.Cells(Rows.Count, "j").End(xlUp)
        Set datarevisor = ws2.Cells(Rows.Count, "k").End(xlUp)
        Set datasedev = ws2.Cells(Rows.Count, "l").End(xlUp)
        Set dataar = ws2.Cells(Rows.Count, "m").End(xlUp)
        Set datart = ws2.Cells(Rows.Count, "n").End(xlUp)
        Set motivo1 = ws2.Cells(Rows.Count, "o").End(xlUp)
        Set motivo2 = ws2.Cells(Rows.Count, "p").End(xlUp)
        Set motivo3 = ws2.Cells(Rows.Count, "q").End(xlUp)
        Set dataremkt = ws2.Cells(Rows.Count, "r").End(xlUp)
        Set dataresedev = ws2.Cells(Rows.Count, "s").End(xlUp)

            código.Offset(1, 0) = ws1.Range("d4").Value
            datarecebimento.Offset(1, 0) = ws1.Range("H4")
            tipo.Offset(1, 0) = ws1.Range("b8")
            textobrevematerial.Offset(1, 0) = ws1.Range("D8")
            codigopa.Offset(1, 0) = ws1.Range("B12")
            textobrevepa.Offset(1, 0) = ws1.Range("D12")
            ncm.Offset(1, 0) = ws1.Range("B16")
            versão.Offset(1, 0) = ws1.Range("D16")
            dataimpressão.Offset(1, 0) = ws1.Range("F18")
            datamkt.Offset(1, 0) = ws1.Range("F20")
            datarevisor.Offset(1, 0) = ws1.Range("F22")
            datasedev.Offset(1, 0) = ws1.Range("M18")
            dataar.Offset(1, 0) = ws1.Range("M20")
            datart.Offset(1, 0) = ws1.Range("m22")
            motivo1.Offset(1, 0) = ws1.Range("B26")
            motivo2.Offset(1, 0) = ws1.Range("B30")
            motivo3.Offset(1, 0) = ws1.Range("B32")
            dataremkt.Offset(1, 0) = ws1.Range("F38")
            dataresedev.Offset(1, 0) = ws1.Range("M38")

    End Sub

那么即使前一行包含空单元格,我应该用什么代码将所有代码插入同一行?

1 个答案:

答案 0 :(得分:0)

编辑:这个确切的代码适用于Excel:

Sub Botao()

Dim ws1, ws2 As Worksheet
Dim rowNum As Long

Set ws1 = Worksheets("Plan1")
Set ws2 = Worksheets("Plan2")
rowNum = ws2.Cells(Rows.Count, "a").End(xlUp).Row 'Get last used row in column A
rowNum = rowNum + 1 'Increment to next open row

Dim código, tipo, textobrevematerial, codigopa, textobrevepa, ncm, versão, motivo1, motivo2, motivo3, datarecebimento, _
dataimpressao, datamkt, datarevisor, datasedev, dataar, datart, dataredmkt, dataredsedev As Range

'Use next open row of column A (rowNum) for all columns
Set código = ws2.Cells(rowNum, "a")
Set datarecebimento = ws2.Cells(rowNum, "b")
Set tipo = ws2.Cells(rowNum, "c")
Set textobrevematerial = ws2.Cells(rowNum, "d")
Set codigopa = ws2.Cells(rowNum, "e")
Set textobrevepa = ws2.Cells(rowNum, "f")
Set ncm = ws2.Cells(rowNum, "g")
Set versão = ws2.Cells(rowNum, "h")
Set dataimpressão = ws2.Cells(rowNum, "i")
Set datamkt = ws2.Cells(rowNum, "j")
Set datarevisor = ws2.Cells(rowNum, "k")
Set datasedev = ws2.Cells(rowNum, "l")
Set dataar = ws2.Cells(rowNum, "m")
Set datart = ws2.Cells(rowNum, "n")
Set motivo1 = ws2.Cells(rowNum, "o")
Set motivo2 = ws2.Cells(rowNum, "p")
Set motivo3 = ws2.Cells(rowNum, "q")
Set dataremkt = ws2.Cells(rowNum, "r")
Set dataresedev = ws2.Cells(rowNum, "s")

'----------Checking for duplicate in column A---------
Dim bool As Boolean
bool = False                  'Initialize False, until duplicate is found

For i = 1 To (rowNum - 1)     'Go through each row of column A except the new row
    If ws1.Range("d4") = ws2.Cells(i, "a") Then  'If it matches any old row set boolean True
        bool = True
    End If
Next i

If bool = True Then           'If duplicate was found, display MsgBox
    Dim msg As String
    Dim title As String
    Dim ret As Integer
    msg = "There is a duplicate in column A"
    title = "Duplicate!"

    ret = MsgBox(msg, vbOKOnly, title) 'MsgBox(Promt, Button(s), Title)
'----------Done checking for duplicate-------------
Else                          'If no duplicate found, insert new row
    'Set values
    código.Value = ws1.Range("d4")
    datarecebimento.Value = ws1.Range("H4")
    tipo.Value = ws1.Range("b8")
    textobrevematerial.Value = ws1.Range("D8")
    codigopa.Value = ws1.Range("B12")
    textobrevepa.Value = ws1.Range("D12")
    ncm.Value = ws1.Range("B16")
    versão.Value = ws1.Range("D16")
    dataimpressão.Value = ws1.Range("F18")
    datamkt.Value = ws1.Range("F20")
    datarevisor.Value = ws1.Range("F22")
    datasedev.Value = ws1.Range("M18")
    dataar.Value = ws1.Range("M20")
    datart.Value = ws1.Range("m22")
    motivo1.Value = ws1.Range("B26")
    motivo2.Value = ws1.Range("B30")
    motivo3.Value = ws1.Range("B32")
    dataremkt.Value = ws1.Range("F38")
    dataresedev.Value = ws1.Range("M38")
End If

End Sub