2017-02-09 127 views
-1

两行我是一个VBA初学者和为此,下面的查询可能是你很容易,但我不能让它复制粘贴下面的宏

什么我想是这样的:

构建在一张纸上(现有的)和

  • 副本

    1. 输入与日期和信用评级一个宏并将其粘贴到一个预定表,并
    2. 每次哟你在输入栏输入新数据并点击宏按钮,宏应该复制并粘贴到表中,但是在最后使用的单元/行下面有两行。
    3. 有一个图表,用于读取数据粘贴到的范围数据,并自动将其范围调整为新粘贴的值。

    我希望,我已经解释好我的问题了,以便您可以提供帮助。

    Dim x As Integer 
    Worksheets("Input").Range("D6:D7").Copy 
    x = 2 
    Do 
        x = x + 2 
        Worksheets("Chart").Range("B" & x).PasteSpecial Paste:=xlPasteValues,Transpose:=True, xlPasteValues 
    Loop Until x = 56 
    Application.CutCopyMode = False 
    End Sub 
    

    谢谢!

  • +1

    首先启动某些功能,显示不起作用的代码,我们将帮助您使其工作。 – frenchie

    +0

    这只会粘贴我的输入值多次,每隔一行直到循环结束。然而,我想要的是添加新的输入值,每按一下按钮,最后一行下面两行: [code] Dim x As Integer 工作表(“输入”)。范围(“D6:D7”)。 X = 2 执行 X = X + 2个 工作表( “图”)范围( “B” &X).PasteSpecial粘贴:= xlPasteValues,移调:=真,xlPasteValues 循环,直到X = 56 应用。 CutCopyMode = False End Sub [code] –

    +0

    现在我把这段代码放在你的问题中,但是将来代码更容易阅读。正如你所看到的,它在评论中不可读。 – Rdster

    回答

    0

    尝试下面的代码:

    Option Explicit 
    
    Sub CopyTowRowsbelow() 
    
    Dim x As Long 
    
    Worksheets("Input").Range("D6:D7").Copy 
    
    With Worksheets("Chart") 
        x = .Cells(.Rows.Count, "B").End(xlUp).Row ' find last row in column B 
        .Range("B" & x + 2).PasteSpecial Paste:=xlPasteValues, Transpose:=True ' Paste the value 2 rows below the last cel with data 
    End With 
    Application.CutCopyMode = False 
    
    End Sub 
    
    +0

    hi shai rado。谢谢你的评论。我认为你误解了,我不想找到列的最后一行,而是列中的最后一行有一个值,然后在下一行粘贴下一个值。 –

    +0

    @ jules_05这正是我的代码,它发现列B中最后一行的值(你测试了我的代码?) –

    +0

    我做到了。谢谢。 我的问题是,我的目标是放置值的位置,每隔一行就有一个值。然后在B2:C2开始的第二行中发布输入的值(每次点击按钮),然后通过下一次单击按钮B4:C4,然后B6:C6等... 谢谢提前.. –

    0

    我找到一份粘贴到通常是一个不好的做法,因为它使用的系统剪贴板,可以擦除数据,用户必须在剪贴板。相反,我尝试显式设置目标值。如果将代码粘贴到输入工作表的代码模块中,此代码应该可以工作。

    Public Sub Worksheet_Change(ByVal Target As Range) 
    'this built in subroutine in excel executes whenever something is changed on the worksheet 
    'we'll use this subroutine to determine range "D6:D7" was part of the sheet that was changed 
    
    'declare the range we want to detect if a change occurred, we'll just monitor range D7 
    Dim rangeMonitorForChange As Range 
    Set rangeMonitorForChange = Worksheets("Input").Range("D7") 
    
    'if the range changed on the sheet and the range were monitoring overlap/intersect then we'll call the method to upadte the chart sheet 
        If Not Application.Intersect(Target, rangeMonitorForChange) Is Nothing Then 
         copyDown 
        End If 
    End Sub 
    
    
    Sub copyDown() 
    'define where to "copy" from 
    Dim rngSource As Range 
    Set rngSource = Worksheets("Input").Range("D6:D7") 
    
    'find the row we're going to "paste" to 
    Dim destRow As Long 
    destRow = Sheets("Chart").Range("B" & Sheets("Chart").Rows.Count).End(xlUp).Row + 2 
    
    'define "paste" destination 
    Dim rngDest As Range 
    Set rngDest = Sheets("Chart").Range("B" & destRow & ":B" & destRow + 1) 
    
    '"paste" the values in 
    rngDest.Value = rngSource.Value 
    
    End Sub 
    
    +0

    感谢perposterer,我会试一试,让你知道尽快。 –

    +0

    这段代码对我不起作用,因为这些值被粘贴在我的表格的底部(请参阅下面的注释中的解释),并且这些值不会转置。你有问题吗? –