帮我解释下这个excel里的vba,并教教我怎么用哈,拒绝复制粘贴,谢谢??
发布网友
发布时间:2022-04-26 15:23
我来回答
共2个回答
热心网友
时间:2023-10-11 15:33
Sub mypaste()
Application.ScreenUpdating = False '禁止自动刷新
s = Selection.Count '选中单元格的数量
ReDim arr(s - 1) '定义数组变量
For Each Rng In Selection '在选中的单元格中循环
arr(i) = Rng.Address '将选中单元格的地址存在arr数组中
i = i + 1 '计数
Next
Range("xfd1").PasteSpecial (xlPasteAll) '将拷贝的数据所有格式复制到自定义名称为“xfd1"的单元格
For i = 0 To s - 1 '建立循环
Range("xfd1").Offset(i, 0).Cut '循环从xfd1单元格中剪切一个单元格
Range(arr(i)).Select '选中之前所选中的单元格
ActiveSheet.Paste '粘贴
Next i
Application.ScreenUpdating = True '恢复自动刷新
End Sub
Sub mypaste2()
Set Mydata = New DataObject '定义变量Mydata为剪贴板对象
Application.ScreenUpdating = False '禁止自动刷新
Mydata.GetFromClipboard Mydata '数据取自剪贴板
arr = Split(Mydata.GetText(1), Chr(13) + Chr(10)) '将Mydata的数值以空格和回车键分隔转换到arr数组中
i = 0 '定义i的初始值,不定义默认为0
For Each Rng In Selection
Rng.Value = arr(i) '将arr值循环写入所选中的单元格中
i = i + 1
Next
Set Mydata = Nothing '清除Mydata对象
Application.ScreenUpdating = True '恢复自动刷新
End Sub
追问教教我用法吧,在excel里用不了呢?!
追答这本来就是EXCEL中的VBA呀,如何用不了?
热心网友
时间:2023-10-11 15:34
Sub mypaste()
Application.ScreenUpdating = False
s = Selection.Count ‘选中单元格的数量
ReDim arr(s - 1) 定义数组变量
For Each Rng In Selection 循环数据处理
arr(i) = Rng.Address 将选中单元格的地址存在ARR里
i = i + 1 计算有多少个单元格
Next
Range("xfd1").PasteSpecial (xlPasteAll) 将拷贝的数值以及公式等所有格式复制到命名为“Xfd1"的单元格中
For i = 0 To s - 1
Range("xfd1").Offset(i, 0).Cut '从xfd1单元格中一个单元格一个单元格的剪切
Range(arr(i)).Select 选中之前所选中的单元格
ActiveSheet.Paste 粘贴
Next i
Application.ScreenUpdating = True
End Sub
复制代码
方式二(仅包含单元格数值,复制源区域支持单列中的连续或非连续单元格,粘贴目标区域支持单列或多列连续或非连续单元格。)
Sub mypaste2()
Set MyData = New DataObject 定义MYDATA
Application.ScreenUpdating = False
MyData.GetFromClipboard Mydata数据取自剪贴板
arr = Split(MyData.GetText(1), Chr(13) + Chr(10)) 将MYDATA数值以空格和回车键区分并存入ARR
i = 0
For Each Rng In Selection
Rng.Value = arr(i) 将ARR值写入所选中的单元格中
i = i + 1
Next
Set MyData = Nothing
Application.ScreenUpdating = True
End Sub