Vba 复制值的变量范围而不是公式

Vba 复制值的变量范围而不是公式,vba,excel,Vba,Excel,我试图将一个变量范围从一本书1复制到另一本书2的变量范围的末尾。我只对书1中变量范围的值感兴趣,这就是问题所在。所以我需要找到最后一行值,而不是公式。在这个论坛上,我找到了几个选择,但没有一个适合我。以下是我得到的信息,请参见代码复制详细信息的第二部分USHB-“选择要复制的单元格: ''''''Copy Detail by Vendor'''''' 'Last cell in column Dim WS As Worksheet Dim Las

我试图将一个变量范围从一本书1复制到另一本书2的变量范围的末尾。我只对书1中变量范围的值感兴趣,这就是问题所在。所以我需要找到最后一行值,而不是公式。在这个论坛上,我找到了几个选择,但没有一个适合我。以下是我得到的信息,请参见代码复制详细信息的第二部分USHB-“选择要复制的单元格:

                ''''''Copy Detail by Vendor''''''
'Last cell in column

    Dim WS As Worksheet
    Dim LastCell As Range
    Dim LastCellRowNumber As Long
    Set WS = Worksheets("Detail by Vendor")
    With WS
    Set LastCell = .Cells(.Rows.Count, "B").End(xlUp)
    LastCellRowNumber = LastCell.Row + 1
    End With
    Dim wb As Workbook, wb2 As Workbook
    Dim vFile As Variant

'Set source workbook
Set wb = ActiveWorkbook

'Open the target workbook
Workbooks.Open Filename:= _
        "Book2.xlsm"
'Set selectedworkbook
Set wb2 = ActiveWorkbook

'Select cells to copy
Sheets("By Vendor").Select
Range("A2").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy

'Go back to original workbook you want to paste into
wb.Activate
Sheets("Detail by Vendor").Select

'Paste starting at the last empty row
wb.Worksheets("Detail by Vendor").Range("B" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True

                    '''''Copy Detail USHB'''''
'Last cell in column
    Set WS = Worksheets("Detail USHB")
    With WS
    Set LastCell = .Cells(.Rows.Count, "B").End(xlUp)
    LastCellRowNumber = LastCell.Row + 1
    End With
'Activate the target workbook
wb2.Activate

'Select cells to copy
Sheets("Detail USHB").Select
Dim jLastRow As Long
jLastRow = Columns("B").Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows,       SearchDirection:=xlPrevious).Row

Range(Selection, ActiveCell.SpecialCells(xlLastRow).Select
Selection.Copy

'Go back to original workbook you want to paste into
wb.Activate
Sheets("Detail USHB").Select

'Paste starting at the last empty row
wb.Worksheets("Detail USHB").Range("B" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

根据您的评论,我相信您正在努力做到以下几点:

    '...

    '''''Copy Detail USHB'''''
    Dim D As Range
    Dim S As Range
    With wb2.Worksheets("Detail USHB")
        'Locate the last non-blank value in source range
        LastRow = .Range("B:B").Find(What:="*", _
                                     LookIn:=xlValues, _
                                     SearchDirection:=xlPrevious).Row
        'Set range
        Set S = .Range("B2:B" & LastRow)
    End With 
    With wb.Worksheets("Detail USHB")
        'Find last used cell in destination range
        Set D = .Range("B" & .Rows.Count).End(xlUp)
        'Offset to next row, and resize appropriately
        Set D = D.Offset(1, 0).Resize(LastRow - 1, 1)
    End With
    'Copy values
    D.Value = S.Value
End Sub

为什么要给这个java添加标签?excel vba不是更合适吗?如果您只关心值,那么根本不要复制/粘贴。简单地说,R.Value=S.Value,其中R和S是适当设置的范围变量。@JohnColeman此范围将发生变化,我需要合并的范围将发生变化。所以它在我的案例中不起作用范围可以动态地分配给变量。您不必将范围变量设置为固定范围。在任何情况下,有一个范围变量都不是很重要。要点是使用range对象的Value属性直接传输值,而无需复制/粘贴。类似于目标范围的Rangeexpression。Value=源范围的Rangeexpression。Value有效。我是否正确地认为您希望源范围来自wb2.SheetsDetail USHB中的最后一个单元格。RangeB:B包含常数,并延伸到该列中最后一个使用的单元格,即一个常数和它下面的所有公式,或者可能只是所有公式,没有包含该常数的行。你的问题是如何找到包含最后一个常数的单元格?@johncoleman-我把R.Value=S.Value改为D.Value=S.Value,这样我就不会被指控剽窃;