我找不到任何办法。我现在拥有的是它将范围复制为图像:
Dim XLApp As Excel.Application
Dim PPSlide As Slide
Set XLApp = GetObject(, "Excel.Application")
XLApp.Range("A1:B17").Select
XLApp.Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
PPSlide.Shapes.Paste.Select
这就像一个魅力,但它是否可以让它将范围复制为表而不是图片?
答案 0 :(得分:9)
这可以通过
简单地完成Dim XLApp As Excel.Application
Dim PPSlide As Slide
Set XLApp = GetObject(, "Excel.Application")
XLApp.Range("A1:B17").Copy
PPSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoFalse
答案 1 :(得分:2)
好吧,如果我手动复制它,我可能会选择Paste Special并选择“Formatted Text(RTF)”作为类型。我相信你可以在VBA中模仿它。
您的XL文件的链接现已嵌入您的PP文件中。当XL文件中的数据发生变化时,您可以:
ActivePresentation.UpdateLinks
这是一种与你先做的非常不同的方法,但我相信这会让你更接近你的目标。但它有自己的问题,但可以解决这些问题。
答案 2 :(得分:0)
只需要自己解决这个问题。这是特殊的粘贴对我有用:
XLApp.Selection.Copy
PPSlide.Shapes.PasteSpecial DataType:=ppPasteDefault
我在这里找到了特殊粘贴选项的完整列表:
http://www.thespreadsheetguru.com/blog/2014/3/17/copy-paste-an-excel-range-into-powerpoint-with-vba
答案 3 :(得分:0)
以上提出的解决方案对我不起作用,因为excel表继续作为(不可编辑的)图片粘贴在powerpoint中。
直接运行专辑' Keep Source Formatting' powerpoint命令栏中的按钮运行以下代码:
Application.CommandBars.ExecuteMso ("PasteSourceFormatting")
Microsoft msdn网站上的更多(但有限)信息:https://msdn.microsoft.com/en-us/library/office/ff862419.aspx
答案 4 :(得分:-1)
Sub abc()
j = 2
Sheets("sheet1").Select
ActiveSheet.Range("a1").Select
ActiveSheet.Range("a65536").Select
lastrow = Selection.End(xlUp).Row
'/// column a
ActiveSheet.Range("a3:a" & lastrow).Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$A$3:$A$" & lastrow).AutoFilter Field:=1, Criteria1:="="
Set Rng = ActiveSheet.AutoFilter.Range
cnt = Rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If cnt = 0 Then
GoTo label1
End If
ActiveSheet.Range("a3:a" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Copy
'Selection.EntireRow.Select
' Range(Selection, Selection.End(xlToRight)).Select
rownum = Selection.Row
' If rownum = 3 Then
' Selection.AutoFilter
' GoTo label1
' End If
'Selection.Copy
Sheets("Sheet2").Select
'lrow = ActiveSheet.Range("A65536").End(xlUp).Row
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
ActiveSheet.Range("a" & lrow + 1).Select
ActiveSheet.Paste
Sheets("Sheet1").Select
Selection.Offset(1, 0).SpecialCells(xlCellTypeVisible).Select
Selection.EntireRow.Delete
Application.CutCopyMode = False
label1:
Selection.AutoFilter
'column b///////////
ActiveSheet.Range("a65536").Select
lastrow = Selection.End(xlUp).Row
ActiveSheet.Range("b3:b" & lastrow).Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$b$3:$b$" & lastrow).AutoFilter Field:=1, Criteria1:="="
Set Rng = ActiveSheet.AutoFilter.Range
cnt = Rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If cnt = 0 Then
GoTo label2
End If
ActiveSheet.Range("$b$3:$b$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Copy
'Range(Selection, Selection.End(xlToLeft)).Select
'
' Selection.EntireRow.Select
'Range(Selection, Selection.End(xlToRight)).Select
' rownum = Selection.Row
' If rownum = 3 Then
' Selection.AutoFilter
' GoTo label2
' End If
' Selection.Copy
Sheets("Sheet2").Select
'lrow = ActiveSheet.Range("A65536").End(xlUp).Row
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
ActiveSheet.Range("a" & lrow + 1).Select
ActiveSheet.Paste
Sheets("Sheet1").Select
'Selection.SpecialCells(xlCellTypeVisible).Select
'Selection.Offset(1, 0).SpecialCells(xlCellTypeVisible).Select
'
' Selection.EntireRow.Delete
ActiveSheet.Range("$b$3:$b$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
Application.CutCopyMode = False
label2:
Selection.AutoFilter
'column c////////////
ActiveSheet.Range("c65536").Select
lastrow = Selection.End(xlUp).Row
ActiveSheet.Range("c3:c" & lastrow).Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$c$3:$c$" & lastrow).AutoFilter Field:=1, Criteria1:="SG Plus", _
Operator:=xlOr, Criteria2:="=Select"
Set Rng = ActiveSheet.AutoFilter.Range
cnt = Rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If cnt = 0 Then
GoTo label3
End If
ActiveSheet.Range("$c$3:$c$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Copy
'Range(Selection, Selection.End(xlToRight)).Select
' Selection.Copy
' Sheets("Sheet2").Select
' lrow = activehseet.Range("A65536").End(xlUp).Row
' ActiveSheet.Range("a" & lrow).Select
' ActiveSheet.Paste
' Sheets("Sheet1").Select
' rownum = Selection.Row
' If rownum = 3 Then
' Selection.AutoFilter
' GoTo label3
' End If
' Range("a4:a" & lastrow).Select
' Range(Selection, Selection.End(xlToRight)).Select
' Selection.EntireRow.Select
' Selection.SpecialCells(xlCellTypeVisible).Select
ActiveSheet.Range("$c$3:$c$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select
Selection.EntireRow.Delete
Application.CutCopyMode = False
label3:
Selection.AutoFilter
'column c again/////////////
ActiveSheet.Range("c65536").Select
lastrow = Selection.End(xlUp).Row
ActiveSheet.Range("c3:c" & lastrow).Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveSheet.Range("$c$3:$c$" & lastrow).AutoFilter Field:=1, Criteria1:="="
Set Rng = ActiveSheet.AutoFilter.Range
cnt = Rng.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If cnt = 0 Then
GoTo label4
End If
ActiveSheet.Range("$c$3:$c$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Copy
' rownum = Selection.Row
' If rownum = 3 Then
' Selection.AutoFilter
' GoTo label4
' End If
'
' Range(Selection, Selection.End(xlToRight)).Select
'
' Range("a4:a" & lastrow).Select
' Range(Selection, Selection.End(xlToRight)).Select
'
' Selection.EntireRow.Copy
Sheets("Sheet2").Select
'lrow = ActiveSheet.Range("A65536").End(xlUp).Row
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
ActiveSheet.Range("a" & lrow + 1).Select
ActiveSheet.Paste
Sheets("Sheet1").Select
ActiveSheet.Range("$c$3:$c$" & lastrow - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select
' Selection.SpecialCells(xlCellTypeVisible).Select
Selection.EntireRow.Delete
Application.CutCopyMode = False
label4:
Selection.AutoFilter
'////////////////////////// over /////////////////////////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("a" & i).Select
If Range("a" & i).Value = "MidAmerica" Or Range("a" & i).Value = "Northeast" Or Range("a" & i).Value = "Southeast" Or _
Range("a" & i).Value = "West" Then
GoTo cont
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont:
Next i
'/////// column b ///////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("b" & i).Select
If Range("b" & i).Value = "CA" Or Range("b" & i).Value = "AZ" Then
GoTo cont2
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont2:
Next i
'///////////column c //////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("c" & i).Select
If Range("c" & i).Value = "SG" Then
GoTo cont3
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont3:
Next i
'//////////column l/////////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("l" & i).Select
If Range("l" & i).Value <= "01/06/2014" And Range("l" & i).Value >= "01/01/2013" Then
GoTo cont4
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont4:
Next i
'//////////column m/////////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("m" & i).Select
If Range("m" & i).Value = "12/01" Or Range("m" & i).Value = "12/05" Then
GoTo cont5
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont5:
Next i
'//////////column q and r/////////////
ActiveSheet.Range("a1").Select
For i = 4 To lastrow
Range("q" & i).Select
If Range("q" & i).Value <> " " And Range("r" & i).Value <> " " And Range("u" & i).Value <> " " _
And Range("z" & i).Value <> " " And Range("aa" & i).Value <> " " And Range("ab" & i).Value <> " " _
And Range("b" & i).Value <> " " And Range("j" & i).Value <> " " Then
GoTo cont6
Else
Rows(i).Select
Application.CutCopyMode = False
Selection.Cut
Sheets("Sheet2").Select
lrow = Cells.Find(what:="*", after:=[a1], searchorder:=xlByRows, _
searchdirection:=xlPrevious).Row
Range("a" & lrow + 1).Select
ActiveSheet.Paste
j = j + 1
Sheets("sheet1").Select
Selection.Delete Shift:=xlUp
End If
cont6:
Next i
End Sub