Excel VBA - Durchlaufen Sie die Powerpoint-Form und identifizieren Sie die Textzeile, die sich nicht im Excel-Bereich befindet

1

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

Die Idee der letzten Schleife ist, dass die Textzeile in der Form, wenn sie nicht im Excel-Bereich gefunden wird, aufgezeichnet wird. Es funktioniert nicht, da der Code alle Zeilen in der Form zurückgibt, was bedeutet, dass keine gefunden wurde, und wenn ich eine Not Bedingung, es werden keine Zeilen zurückgegeben, auch nicht diejenigen, 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
sptfire101
quelle
Mein Gefühl ist das On Error Resume Next Sie haben eventuell vorhandene Fehler maskiert. Haben Sie versucht, durchzugehen und zu überprüfen, welche Werte in jeder Iteration gefunden werden?
benshepherd
Employee_Rng.Find(nm.Value) Paragraphs Methode gibt a zurück textrange Eine schnelle Dokumentprüfung zeigt, dass es für a keine "value" -Eigenschaft gibt textrange Objekt. Ist ".value" gültig? Resume-next würde direkt darüber springen. Sie gehen auch davon aus, dass es sich um einen Volltext handelt, der keine Leerzeichen usw. enthält. Ist das eine gültige Annahme?
Yorik

Antworten:

0

Möglicherweise ist es besser, wenn Sie die Sammlung "Absätze" oder "Zeilen" des TextRange der Form durchlaufen. Ein einfaches Beispiel, das ein ausgewähltes Textfeld voraussetzt:

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 schrittweise durchlaufen können (Absatz = Sie haben am Ende eine EINGABETASTE eingegeben; Zeile = Sie haben einen Zeilenumbruch eingegeben oder die Zeile wurde durch Zeilenumbruch unterbrochen)

Steve Rindsberg
quelle