Excel VBA – Durchlaufen Sie die Powerpoint-Form und identifizieren Sie die Textzeile, die nicht im Excel-Bereich liegt

Excel VBA – Durchlaufen Sie die Powerpoint-Form und identifizieren Sie die Textzeile, die nicht im Excel-Bereich liegt

Ich schreibe ein Makro, um festzustellen, ob die Textzeilen in einer PowerPoint-Form in einem Excel-Bereich nicht vorhanden sind.

Die Idee hinter der letzten Schleife ist, dass die Textzeile in der Form aufgezeichnet wird, wenn sie nicht im Excel-Bereich gefunden wird. Das funktioniert nicht, da der Code alle Zeilen in der Form zurückgibt, was bedeutet, dass keine gefunden wurde. Wenn ich eine NotBedingung hinzufüge, werden keine Zeilen zurückgegeben, auch nicht die, die nicht im Excel-Bereich liegen.

Irgendwelche Ideen?

Hier ist mein Code:

Sub Updt_OrgChart_Test1()

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide

Set PPApp = CreateObject("Powerpoint.Application")

PPApp.Visible = True


Set PPPres = PPApp.Presentations("presentation 2016.pptx")
Set PPSlide = PPPres.Slides(6)

Dim wb As Workbook
Dim teste_ws As Worksheet
Dim SDA_ws As Worksheet

Set wb = ThisWorkbook
Set teste_ws = wb.Sheets("Teste")
Set SDA_ws = wb.Sheets("FZ SW KRK SDA")

Dim shp As PowerPoint.Shape

Dim L5AndTeam As String
L5AndTeam = SDA_ws.Range("C3")
Dim Employee_Rng As Range
Set Employee_Rng = SDA_ws.Range(Range("B8"), Range("B8").End(xlDown))

For Each shp In PPSlide.Shapes
     On Error Resume Next
     If shp.TextFrame.HasText Then
       If shp.TextFrame.TextRange.Lines.Count > 2 Then
         If Left(shp.Name, 3) = "Rec" Then
            Dim prg As PowerPoint.TextRange
            For Each prg In shp.TextFrame.TextRange.Paragraphs
                Dim nm As String
                nm = prg
                If Employee_Rng.Find(nm.Value) Is Nothing Then
                   MsgBox nm  <---- this is just a test, will add more code here
                End If
            Next prg
           End If
        End If
     End If
Next shp

End Sub

Antwort1

Möglicherweise ist es besser, die Paragraphs- oder Lines-Sammlung des Textbereichs der Form zu durchlaufen. Einfaches Beispiel, das von einem ausgewählten Textfeld ausgeht:

Sub Thing()

Dim oSh As Shape
Dim x As Long

Set oSh = ActiveWindow.Selection.ShapeRange(1)

If oSh.HasTextFrame Then
    With oSh.TextFrame.TextRange
        For x = 1 To .Paragraphs.Count
            Debug.Print .Paragraphs(x).Text
        Next
        For x = 1 To .Lines.Count
            Debug.Print .Lines(x).Text
        Next
    End With
End If

End Sub

Beachten Sie, dass Sie Absätze oder Zeilen durchgehen können (Absatz = Sie haben am Ende die Eingabetaste gedrückt; Zeile = Sie haben einen Zeilenumbruch eingegeben oder die Zeile wurde durch einen Zeilenumbruch umgebrochen).

verwandte Informationen