Vba 削减开支;粘贴覆盖范围对象定义
我发现Excel VBA的剪切和粘贴有一个有趣的问题,涉及到使用定义的范围对象 以下是不起作用的代码:Vba 削减开支;粘贴覆盖范围对象定义,vba,excel,copy-paste,Vba,Excel,Copy Paste,我发现Excel VBA的剪切和粘贴有一个有趣的问题,涉及到使用定义的范围对象 以下是不起作用的代码: Sub PasteToRangeDoesntWork() Dim StRng As Range Dim j, k, x, y As Integer Set StRng = Range("A3") x = 0 j = Range(StRng, StRng.End(xlToRight)).Columns.Count k = WorksheetFunction.Max(Range(StRng, S
Sub PasteToRangeDoesntWork()
Dim StRng As Range
Dim j, k, x, y As Integer
Set StRng = Range("A3")
x = 0
j = Range(StRng, StRng.End(xlToRight)).Columns.Count
k = WorksheetFunction.Max(Range(StRng, StRng.End(xlDown)))
For y = 1 To k
While StRng.Offset(x, 0) = y
x = x + 1
Wend
If y < k Then
Range(StRng.Offset(x, 0), StRng.End(xlDown).Offset(o, j - 1)).Select
Selection.Cut
Set StRng = StRng.Offset(0, j + 1)
ActiveSheet.Paste Destination:=StRng
x = 0
End If
Next y
End Sub
这是有效的——即,通过不将新单元格直接粘贴到StRng
,而是粘贴到StRng.offset(0,1)
,StRng
对象仍保持定义状态
讨论中的数据有五列。第一列是整数(值从1到7),下一列是文本,后面是日期列,最后是两列常规格式数据(2个小数点)
修复并不困难,但我不明白为什么第一个代码不起作用。有人有想法吗?如果使用.Paste方法,则所有与粘贴边界相关的定义范围都将重置。确切的“为什么?”恐怕只有微软能解释 更好的选择是使用Range.Value和Range.Clear成员;这些不会导致此问题,速度更快,也不会弄乱剪贴板。但是请注意,这仅复制值,而不复制格式或任何公式 这方面的代码可以是这样的:
Dim SourceRng As Range
Set SourceRng = Range(StRng.Offset(x, 0), StRng.End(xlDown).Offset(0, j - 1))
Set StRng = StRng.Offset(0, j + 1)
Dim DestRng As Range
Set DestRng = StRng.Resize(SourceRng.Rows.Count, SourceRng.Columns.Count)
DestRng.Value = SourceRng.Value
Call SourceRng.Clear
您的代码可能有一个输入错误;StRng.End(xlDown).Offset(o,j-1)包含一个“o”(小写字母),这是一个未定义的名称。您是否使用了Option Explicit?如果没有,最好现在就开始使用它来捕获这些类型的错误,并将“0”替换为零。非常感谢。你的建议很有效。
Dim SourceRng As Range
Set SourceRng = Range(StRng.Offset(x, 0), StRng.End(xlDown).Offset(0, j - 1))
Set StRng = StRng.Offset(0, j + 1)
Dim DestRng As Range
Set DestRng = StRng.Resize(SourceRng.Rows.Count, SourceRng.Columns.Count)
DestRng.Value = SourceRng.Value
Call SourceRng.Clear