使用 for 循环将范围中的文本粘贴为 OLEObject
Pasting Text from Ranges as OLEObject using for loop
我正在将来自 excel 的 table 作为 OLEObject 粘贴到 power point(见图 1)。我将 table 转换为范围,因为我合并了相同的日期值。到目前为止,我只能粘贴已排序的 table 和合并的单元格。
Sub TableData()
Dim pptName As String
Dim ppt As PowerPoint.Application
Dim myPres As PowerPoint.Presentation
Dim slds As PowerPoint.Slides
Dim sld, sld1, sld2 As PowerPoint.slide
Dim r As Range
Dim lastRw As Long
Dim pptextbox As PowerPoint.Shape
Dim oLayout As CustomLayout
Application.DisplayAlerts = False
lastRw = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
With ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1")
Set r = .Range
.Unlist ' convert the table back to a range
End With
ThisWorkbook.Worksheets("Sheet1").Range("B2:B" & lastRw).Select
MergeCells:
For Each r In Selection
If r.Value = r.Offset(1, 0).Value And r.Value <> "" Then
Range(r, r.Offset(1, 0)).Merge
Range(r, r.Offset(1, 0)).HorizontalAlignment = xlCenter
Range(r, r.Offset(1, 0)).VerticalAlignment = xlCenter
GoTo MergeCells
End If
Next
Set ppt = CreateObject("PowerPoint.Application")
Set sld1 = ppt.ActivePresentation.Slides.Add(ppt.ActivePresentation.Slides.Count + 1, ppLayoutBlank)
set r=ThisWorkbook.Worksheets("Sheet1").Range("A:B" & lastRw)
r.copy
sld1.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoFalse
End Sub
现在除了table.
之外,我还想将每个特定日期对应的第一列的值分别粘贴为OLEObject(见图2)
我试图将其粘贴为 OLEObject,因为我想使用我在 excel 中使用的条件格式。据我了解,我需要 运行 一个 for 循环。但是,当我合并第二列时,我不知道如何处理。我将非常感谢您 suggestions/Solutions。
看待,
奥利弗
处理合并单元格总是有问题。因此,在合并单元格之前,应该使用动态数组一个一个地应用自动过滤器。然后可以对每个筛选结果应用 For 循环,将其单独粘贴到 PPT 幻灯片中。
Sub TableData()
Dim pptName As String
Dim ppt As PowerPoint.Application
Dim myPres As PowerPoint.Presentation
Dim slds As PowerPoint.Slides
Dim sld, sld1, sld2 As PowerPoint.slide
Dim r As Range
Dim lastRw, lastRw1 As Long
Dim pptextbox As PowerPoint.Shape
Dim oLayout As CustomLayout
Application.DisplayAlerts = False
'Here column 'D' contains only unique dates
lastRw = Sheets("Sheet1").Range("D" & Rows.Count).End(xlUp).Row
Dim list() As Variant
ReDim list(2 To lastRw)
Dim i, j As Byte
For i = 2 To lastRw
list(i) = Cells(i, 4).Value
Next i
lastRw1 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row
Set ppt = CreateObject("PowerPoint.Application")
Set sld1 = ppt.ActivePresentation.Slides.Add(ppt.ActivePresentation.Slides.Count + 1,
ppLayoutBlank)
For j = LBound(list) To UBound(list)
ActiveSheet.Range("A2:C" & lastRw1).AutoFilter Field:=2, Criteria1:= _
list(j)
lastRw1 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row
Set r = ThisWorkbook.Worksheets("Sheet1").Range("$A:A" & lastRw1)
r.Copy
sld1.Shapes.PasteSpecial DataType:=ppPasteRTF, Link:=msoFalse
'Defining the position of the Text box
If j < 10 Then
sld1.Shapes(j - 1).Top = 5
sld1.Shapes(j - 1).Left = 5 + (j - 1) * 100
Else
sld1.Shapes(j - 1).Top = 300
sld1.Shapes(j - 1).Left = 5 + (j - 9) * 100
End If
Next j
Sheet1.ShowAllData
End Sub
我正在将来自 excel 的 table 作为 OLEObject 粘贴到 power point(见图 1)。我将 table 转换为范围,因为我合并了相同的日期值。到目前为止,我只能粘贴已排序的 table 和合并的单元格。
Sub TableData()
Dim pptName As String
Dim ppt As PowerPoint.Application
Dim myPres As PowerPoint.Presentation
Dim slds As PowerPoint.Slides
Dim sld, sld1, sld2 As PowerPoint.slide
Dim r As Range
Dim lastRw As Long
Dim pptextbox As PowerPoint.Shape
Dim oLayout As CustomLayout
Application.DisplayAlerts = False
lastRw = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
With ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1")
Set r = .Range
.Unlist ' convert the table back to a range
End With
ThisWorkbook.Worksheets("Sheet1").Range("B2:B" & lastRw).Select
MergeCells:
For Each r In Selection
If r.Value = r.Offset(1, 0).Value And r.Value <> "" Then
Range(r, r.Offset(1, 0)).Merge
Range(r, r.Offset(1, 0)).HorizontalAlignment = xlCenter
Range(r, r.Offset(1, 0)).VerticalAlignment = xlCenter
GoTo MergeCells
End If
Next
Set ppt = CreateObject("PowerPoint.Application")
Set sld1 = ppt.ActivePresentation.Slides.Add(ppt.ActivePresentation.Slides.Count + 1, ppLayoutBlank)
set r=ThisWorkbook.Worksheets("Sheet1").Range("A:B" & lastRw)
r.copy
sld1.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoFalse
End Sub
现在除了table.
之外,我还想将每个特定日期对应的第一列的值分别粘贴为OLEObject(见图2)处理合并单元格总是有问题。因此,在合并单元格之前,应该使用动态数组一个一个地应用自动过滤器。然后可以对每个筛选结果应用 For 循环,将其单独粘贴到 PPT 幻灯片中。
Sub TableData()
Dim pptName As String
Dim ppt As PowerPoint.Application
Dim myPres As PowerPoint.Presentation
Dim slds As PowerPoint.Slides
Dim sld, sld1, sld2 As PowerPoint.slide
Dim r As Range
Dim lastRw, lastRw1 As Long
Dim pptextbox As PowerPoint.Shape
Dim oLayout As CustomLayout
Application.DisplayAlerts = False
'Here column 'D' contains only unique dates
lastRw = Sheets("Sheet1").Range("D" & Rows.Count).End(xlUp).Row
Dim list() As Variant
ReDim list(2 To lastRw)
Dim i, j As Byte
For i = 2 To lastRw
list(i) = Cells(i, 4).Value
Next i
lastRw1 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row
Set ppt = CreateObject("PowerPoint.Application")
Set sld1 = ppt.ActivePresentation.Slides.Add(ppt.ActivePresentation.Slides.Count + 1,
ppLayoutBlank)
For j = LBound(list) To UBound(list)
ActiveSheet.Range("A2:C" & lastRw1).AutoFilter Field:=2, Criteria1:= _
list(j)
lastRw1 = Sheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row
Set r = ThisWorkbook.Worksheets("Sheet1").Range("$A:A" & lastRw1)
r.Copy
sld1.Shapes.PasteSpecial DataType:=ppPasteRTF, Link:=msoFalse
'Defining the position of the Text box
If j < 10 Then
sld1.Shapes(j - 1).Top = 5
sld1.Shapes(j - 1).Left = 5 + (j - 1) * 100
Else
sld1.Shapes(j - 1).Top = 300
sld1.Shapes(j - 1).Left = 5 + (j - 9) * 100
End If
Next j
Sheet1.ShowAllData
End Sub