Я пишу макрос, который определяет, отсутствуют ли текстовые строки в форме PowerPoint в диапазоне Excel.
Идея последнего цикла заключается в том, что если текстовая строка в форме не найдена в диапазоне Excel, она записывается. Это не работает, так как код возвращает все строки в форме, что означает, что ни одна не найдена, и если я добавлю условие, Not
он не вернет ни одной строки, даже тех, которые не находятся в диапазоне Excel.
Есть идеи?
Вот мой код:
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
решение1
Возможно, вам лучше будет перебрать коллекцию Paragraphs или Lines TextRange фигуры. Простой пример, который предполагает выбранное текстовое поле:
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
Обратите внимание, что вы можете переходить по абзацам или строкам (абзац = вы нажали ENTER в конце; строка = вы нажали перенос строки или строка была разорвана переносом слов)