我想要一个宏来粘贴剪贴板中的值(我从其他来源复制的值) 转置为工作表中的第E行中的非空单元格" sheet1"
任何帮助?
答案 0 :(得分:0)
function findLastRowInCol(wks as excel.worksheet, col as long)
dim rng as range
with wks
set rng = .cells(.rows.count, col).end(xlup)
findLastRowInCol = rng.row
end with
end function
从“立即”窗格进行测试:
debug.print findLastRowInCol(thisworkbook.sheets("sheet1"), 5)
这将为您提供指定列中最后一个非空单元格的行。请注意,这可能不是工作表的最后一行;选择不同的列可能会给出不同的结果,具体取决于该列的最后一个非空单元格。
编辑:将活动表替换为“sheet1”
编辑:要在另一个宏中使用的示例代码,以便从其他来源粘贴,
thisworkbook.sheets("sheet1").cells(findLastRowInCol(thisworkbook.sheets("sheet1"), 5), 5).pastespecial paste:=xlAll
如果从其他Excel工作表粘贴或剥离格式,您可以使用例如“xlPasteSpecialValues”
编辑添加:要从另一个工作表粘贴一行并进行转置,请使用上面的“.pastespecial”然后使用一些变体:
.pastespecial paste:=xlpastevalues, transpose:=True
最简单的实现是,
sub PasteToE()
thisworkbook.sheets("sheet1").cells(findLastRowInCol(thisworkbook.sheets("sheet1"), 5),5).pastespecial paste:=xlpastevalues, transpose:=True
end sub
将命令按钮添加到另一个工作表并将此宏指定给它。选择您的范围并复制它,然后单击按钮。
答案 1 :(得分:0)
尝试这样的事情:
Sub WriteFromClipboard()
Dim refRow As Integer
Dim Data As DataObject
Dim DataText As String
On Error Resume Next
'Get row to write data:
refRow = 1 + ThisWorkbook.Sheets("Sheet1").Columns(5).Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
If Err.Number > 0 Then
refRow = 1
End If
Err.Clear
'Get data from clipboard:
Set Data = New DataObject
Data.GetFromClipboard
DataText = Data.GetText
'Write data from clipboard on the spreadsheet:
If Err.Number > 0 Then
MsgBox "Clipboard doesn't contain valid data."
Else
ThisWorkbook.Sheets("Sheet1").Cells(refRow, 5).Select
ThisWorkbook.Sheets("Sheet1").Paste
End If
End Sub