【问题标题】:Copy and Paste to next available column复制并粘贴到下一个可用列
【发布时间】:2015-07-01 20:54:37
【问题描述】:

我正在尝试跟踪电子表格中的每周数量。到目前为止,我已经制作了一个宏来复制和粘贴我需要的信息。但它只会将它粘贴到我在录制宏时选择的位置。我希望它将信息粘贴到下一个可用列中。

我还想将宏安排为每周周五早上运行一次。

我现在正在使用的宏。

Sub CopyPaste()
'
' CopyPaste Macro
'

'
   Range("G4:G33").Select
   Selection.Copy
   Range("B35").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

我尝试将 & lastrow 放入该范围,但出现编译错误。任何帮助将不胜感激。

【问题讨论】:

    标签: excel excel-2010 vba


    【解决方案1】:

    乍一看可能稍微复杂一些,但从某种意义上说,处理值移动的一种更漂亮的方法是避免将剪贴板与如下代码一起使用:

    Sub CopyPaste()
    '
    ' CopyPaste Macro
    '
    '
    Dim targetRng As Excel.Range
    Dim destRng As Excel.Range
    Set targetRng = Range("G4:G33")
    
    Dim lc As Long
    With Excel.ThisWorkbook.Sheets("Sheet1")
        lc = .Cells(35, .Columns.Count).End(Excel.xlToLeft).Column
        Set destRng = .Range(.Cells(35, lc), .Cells(35, lc)).Offset(0, 1).Resize(targetRng.Rows.Count, targetRng.Columns.Count)
        destRng.Value = targetRng.Value
    End With
    
    End Sub
    

    上面可以简化成下面这样你就不用担心使用最后一行变量了:

    Sub CopyPaste()
    '
    ' CopyPaste Macro
    '
    '
    Dim targetRng As Excel.Range
    Dim destRng As Excel.Range
    Set targetRng = Range("G4:G33")
    
    With Excel.ThisWorkbook.Sheets("Sheet1")
        Set destRng = .Cells(35, .Columns.Count).End(Excel.xlToLeft).Offset(0, 1).Resize(targetRng.Rows.Count, targetRng.Columns.Count)
        destRng.Value = targetRng.Value
    End With
    
    End Sub
    

    【讨论】:

    • 感谢您的回复。到目前为止,我只使用了 Teylyn 响应。如果失败,我会试试你的。
    • 没问题 Ryan - 这只是一种替代方法。我有一些稍微复杂且重复的宏,发现剪贴板并不总是一个可靠的工具。
    • 我最终改用了你的。您对剪贴板交易的看法是正确的。另外,它更容易调整。例如,我必须确保宏切换到正确的工作表并将其粘贴到正确的工作表。
    【解决方案2】:

    你可以这样算出最后一列的列号:

    Sub CopyPaste()
    '
    ' CopyPaste Macro
    '
    Dim lastCol As Long
    ' this finds the number of the last column
    lastCol = Cells(35, Columns.Count).End(xlToLeft).Column
    
       Range("G4:G33").Copy
    
    '   Range("B35").Select
    ' no need to select. paste into the cell in row 35, one to the right of the last column
       Cells(35, lastCol + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End Sub
    

    你也可以在 lastCol 定义中添加 1 的右边,比如

       lastCol = Cells(35, Columns.Count).End(xlToLeft).Column + 1
       Range("G4:G33").Copy
       Cells(35, lastCol).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=False
    

    要安排宏看看这两个问题herehere

    【讨论】:

    • 我查看了您发布的用于安排宏的两个链接。问题是该页面每天都会打开,因此无需使用任务计划程序。认为这会奏效吗? Private Sub Workbook_Open() Application.OnTime TimeValue("11:00:00"), "MyMacro" End Sub
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多