Excel复制范围并粘贴到可用的特定范围并打印

时间:2018-09-16 21:39:59

标签: excel vba excel-vba

我想在一个工作表中复制一个范围并将其作为值粘贴到另一工作表中,但只在B列中下一个可用单元格中的特定范围内。仅从B4到B23。

我更改了一些在网上找到的代码,但是对寻找下一个可用行不起作用。第一次运行宏后,当我一次又一次运行它时,它什么也不做,也无法仅粘贴值。

在再次运行宏之前,我尝试保存文件,但是仍然无法正常工作。

最后,当“打印”表中的范围已满时,我想要一个消息框,要求我选择其中一台服务器上的一台打印机(不是默认打印机)(在代码中指定服务器路径,例如\ a_server_name)并仅打印此打印纸,或清除“打印纸”中该范围内的记录,或仅将工作表打印保存在新文件中(另存为)到我可以在其中一台服务器上选择的位置(指定服务器)代码\ a_server_name中的路径)或不执行任何操作并结束子代码。

谢谢。

Application.ScreenUpdating = False
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet

Set copySheet = Worksheets(“Data”)
Set pasteSheet = Worksheets("Print”)

copySheet.Range("J11:Q11").Copy
pasteSheet.Range("B4:I23").End(xlUp).Offset(1,0)
.PasteSpecial.xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True

enter image description here

enter image description here

Problem Screenshot

2 个答案:

答案 0 :(得分:1)

这将设置值彼此相等,而无需复制/粘贴。

[
    {
        "id": "1",
        "name": "A"
    },
    {
        "id": "2",
        "name": "B"
    },
    {
        "id": "3",
        "name": "C"
    },
    {
        "id": "4",
        "name": "D"
    },
    ....
    ....
    {
        "id": "n",
        "name": "X"
    }
]

修改您的代码-并减少到最少的示例

Option Explicit

Sub Testing()

Dim wsC As Worksheet: Set wsC = ThisWorkbook.Sheets("Data")
Dim wsP As Worksheet: Set wsP = ThisWorkbook.Sheets("Print")

Dim LRow As Long
LRow = wsP.Range("B" & wsP.Rows.Count).End(xlUp).Offset(1).Row

wsP.Range("B" & LRow).Resize(wsC.Range("J11:Q11").Rows.Count, wsC.Range("J11:Q11").Columns.Count).Value = wsC.Range("J11:Q11").Value

End Sub

答案 1 :(得分:0)

根据我的收集,您要复制8个单元格并将所有8个单元格粘贴到20行(从B4开始)。您不清楚如何重新运行宏,它只会覆盖您刚刚粘贴的数据。

第一个代码会将8个单元格复制到20行中

With ThisWorkbook
        Sheets("Data").Range("J11:Q11").Copy
        Sheets("Print").Range("B4:I23").PasteSpecial Paste:=xlPasteValues
End With

第二个代码使用for循环来完成相同的任务,但是它还将覆盖先前粘贴的数据。

Dim i As Long
    With ThisWorkbook
        For i = 4 To 23
            Sheets("Data").Range("J11:Q11").Copy
            Sheets("Print").Cells(i, 2).PasteSpecial Paste:=xlPasteValues
        Next i
    End With

如果要能够重新使用宏,则必须修改要复制的范围,以允许您选择要复制的范围。也许是一个允许用户输入InputBox的变量。

编辑:

Dim lRow As Long
lRow = Sheets("Print").Cells(Rows.Count, 2).End(xlUp).Row

    With ThisWorkbook
            Sheets("Data").Range("J11:Q11").Copy
            Sheets("Print").Cells(lRow, 2).Offset(1).PasteSpecial Paste:=xlPasteValues
    End With

编辑#3

With ThisWorkbook
    Dim lRow As Long
    lRow = .Sheets("Print").Range("B" & Rows.Count).End(xlUp).Row
        Sheets("Data").Range("J11:Q11").Copy
        Sheets("Print").Cells(lRow, 2).Offset(1).PasteSpecial Paste:=xlPasteValues
End With