提问人:2mas 提问时间:11/15/2023 更新时间:11/15/2023 访问量:38
复制范围而不是单元格
Copy range instead of cell
问:
Sub Progress_speichern()
Const SRC_NAME As String = "C1 EV Application"
Const SRC_DATE_CELL As String = "C2"
Const DST_NAME As String = "C0 EV (Historie)"
Const DST_DATES_LEFT_CELL As String = "S2"
Const DST_KPI_ROW As Long = 3
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Sheets(SRC_NAME)
Dim dws As Worksheet: Set dws = wb.Sheets(DST_NAME)
Dim sDate As Date: sDate = sws.Range(SRC_DATE_CELL).value
Dim srg As Variant: srg = wb.Sheets("C1 EV Application").Range("AD5:AD25").value
Dim drrg As Range
With dws.Range(DST_DATES_LEFT_CELL)
Dim LastCol As Long:
'find last column and define range to be used
LastCol = dws.Cells(.Row, dws.Columns.Count).End(xlToLeft).Column 'find last cell to the right in this row
Set drrg = .Resize(, LastCol - .Column + 1)
End With
Dim cIndex As Variant: cIndex = Application.Match(CLng(sDate), drrg, 0)
' Checks if there are values in the cell beneath the desired month. If yes, it asks the user, whether he wants to rewrite the old value, otherwise the sub is exited
If drrg.Cells(cIndex).EntireColumn.Cells(DST_KPI_ROW).value <> "" Then
If MsgBox("Für diesen Monat gibt es bereits alte Werte. Wollen Sie diese überschreiben?", _
vbYesNo + vbQuestion, "Alte Werte gefunden") Then GoTo Case1 Else GoTo Case2
Case1:
If IsNumeric(cIndex) = True Then
drrg(cIndex, DST_KPI_ROW).value = srg '
' drrg.Cells(cIndex).EntireColumn.Cells(DST_KPI_ROW).value = srg
End If
Case2:
Exit Sub
Else
If IsNumeric(cIndex) = True Then
drrg(cIndex, DST_KPI_ROW).value = srg
End If
End If
End Sub
我有两张纸。在 Sheet1 (C0 EV (Historie)) 上输入数据。用户选择日期并按下按钮。将工作表 1 的范围复制到工作表 2。然后,从此数据范围中计算出 KPI 值。以前只复制了 KPI 值,现在我想复制整个范围,其中 kpi 值位于范围下方。KPI 值包含在范围 (AD5:AD25) 中(AD5-AD22 是值,2 个空行,然后是 KPI)。数据始终与日期匹配。工作表 2 上有固定日期(每月从单元格 S2 的水平列出)。现在,application.match 会查找匹配日期的位置,并尝试将范围粘贴到相应日期下方。
drrg.Cells(cIndex).EntireColumn.Cells(DST_KPI_ROW).value = srg
这有效,它复制单个 KPI 值。现在我基本上想复制一个范围,而不仅仅是一个单元格。
drrg(cIndex, DST_KPI_ROW).value = srg
但是行和列的参数似乎没有按照我想要的方式工作(只有一个值被复制并且在错误的位置)。
Set drrg = .Resize(, LastCol - .Column + 1)
Set drrg = .Resize(20, LastCol - .Column + 1) 'Resize the Cell to a size of 20 -> AD5:AD25 -> 21 rows
在这里,我尝试调整 drrg 的大小,我想也许我没有复制到足够宽的范围,但这也没有用。
答: 暂无答案
评论
drrg.Value = srrg.Value
drrg(cIndex, DST_KPI_ROW)
drrg(cIndex, DST_KPI_ROW).Resize(yourNeededRows, yourNeededColumns).Value = srrg.Resize(yourNeededRows,yourNeededColumns).Value
Dim srg As Variant: srg = wb.Sheets("C1 EV Application").Range("AD5:AD25").value
drrg(cIndex, DST_KPI_ROW).value = srg
Dim srg As Variant: srg = wb.Sheets("C1 EV Application").Range("AD5:AD25").value
(cIndex, DST_KPI_ROW)
导致它是 DRRG 范围内的一个单元格,因此您可以获得奇异值。如果您要复制粘贴,则可以将单个单元格作为目标范围,并且仍然粘贴源范围中的所有值,但由于您使用的是 ,因此略有不同。调整大小的问题出在您的目标范围上,即 .尝试,因为 srg 是一个数组。.Value
drrg
drrg(cIndex, DST_KPI_ROW).Resize(UBound(srg,1),UBound(srg,2)).Value = srg