2017-06-14 6 views
1

Ich bin neu in Excel VBA und suchte nach Hilfe, um meinen Code zu reparieren. Also im Grunde, um Farbe zu bieten, was ich habe, habe ich eine Excel-Datenbank und ein Word-Dokument. Im Word-Dokument habe ich Sektionskopfzeilen (die als "Katze", "Hund" und "Vogel" bezeichnet werden) markiert und in einer Reihe in der Excel-Datenbank habe ich "Hund" und "Vogel".Finden von Übereinstimmungen zwischen einer Excel-Kalkulationstabelle und einem VBA-Array

Ich versuche, einen Code zu schreiben, der die Elemente des Arrays (die Zeichenfolgen sind) mit den Zellenwerten innerhalb eines in einer Excel-Datenbank deklarierten Bereichs vergleicht. Für die Werte, die im Array vorhanden sind, aber nicht im deklarierten Excel-Bereich, möchte ich diese Werte (d. H. Das Lesezeichen) aus dem Word-Dokument löschen.

Wenn mich jemand mit Feedback, Ideen oder Beispielcodes versorgen könnte, würde ich mich sehr darüber freuen.

Danke.

Sub ArrayToDatabase() 

Dim myRange As Variant 
Set myRange = Range("C7:AP7") 

Dim myArray As Variant 
myArray = Array("cat", "dog", "bird") 

Dim i As Integer 
Dim reqName As Object 
For i = LBound(myArray) To UBound(myArray) 
    Set reqName = myArray(i).Value 
    If myRange.Validation(reqName) = False Then 
     wdApp.ActiveDocument.Bookmarks(reqName).Range._ 
     Paragraphs(1).Range.Delete 
    End If 
Next i 

End Sub 

Antwort

3

Logic

  1. Verwenden .Find zu überprüfen, ob die Schlüsselwörter in dem Bereich sind oder nicht.
  2. Speichern Sie die relevanten Keywords in einer durch Kommas getrennte Zeichenfolge, die später in ein Array umgewandelt werden
  3. öffnen Wort doc
  4. Schleife durch das Array und löschen Sie die Lesezeichen

Ist das, was Sie wollen?

Option Explicit 

Sub Sample() 
    Dim myArray As Variant, BookMarksToDelete As Variant 
    Dim oWordApp As Object, oWordDoc As Object 
    Dim sTemp As String, FlName As String 
    Dim aCell As Range, myRange As Range 
    Dim i As Long 

    '~~> Change this to the relevant sheet 
    Set myRange = ThisWorkbook.Sheets("Sheet1").Range("C7:AP7") 

    myArray = Array("cat", "dog", "bird") 

    '~~> Change this to the relevant word document 
    FlName = "C:\Users\Siddharth\Desktop\DeleteMeLater.docx" 

    For i = LBound(myArray) To UBound(myArray) 
     '~~> Check if the word exists in the range or not 
     Set aCell = myRange.Find(What:=myArray(i), LookIn:=xlValues, _ 
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
        MatchCase:=False, SearchFormat:=False) 
     '~~> If it doesn't then store it in a comma delimited string 
     If aCell Is Nothing Then 
      sTemp = sTemp & "," & myArray(i) 
     Else 
      Set aCell = Nothing 
     End If 
    Next i 

    sTemp = Mid(sTemp, 2) 

    If Not Len(Trim(sTemp)) = 0 Then 
     '~~> Convert comma delimited string to array 
     BookMarksToDelete = Split(sTemp, ",") 

     '~~> Open word document 
     Set oWordApp = CreateObject("Word.Application") 
     oWordApp.Visible = True 
     Set oWordDoc = oWordApp.Documents.Open(FlName) 

     '~~> Delete the bookmarks 
     For i = LBound(BookMarksToDelete) To UBound(BookMarksToDelete) 
      oWordDoc.Bookmarks(BookMarksToDelete(i)).Delete 
     Next i 
    End If 

    MsgBox "Done" 
End Sub 
+0

Hey Siddharth, danke für die Antwort. Also fuhr ich fort und lief Ihren Code, und die folgende Zeile kam mit einem "Laufzeitfehler 462". oWordDoc.Bookmarks (BookMarksToDelete (i)). Löschen –

+0

Mein Code ist getestet und versucht :) BTW ich bin Auf dem Weg ins Fitnessstudio muss ich mir das ansehen, wenn ich zurückkomme. Überprüfen Sie, ob Lesezeichen vorhanden sind und keine zusätzlichen Leerzeichen vorhanden sind ... –

+0

Ich habe es herausgefunden, danke nochmal. Wie würde ich auch später diese Zeile, um nicht nur das Lesezeichen zu löschen, sondern auch den Text darunter und den Absatz darunter zu löschen (dh ich habe eine Überschrift und einen Absatz). –

0

Funktioniert Ihr Code? Es ist ein wenig unklar, was Sie fragen, es sei denn, das ist nur für Feedback. Alles, was ich persönlich sagen muss, ist die Art, wie Sie Variablen deklarieren.

Wenn Sie also wissen, was die Variable enthält, ist es am besten, sie als solche zu deklarieren. Zum Beispiel:

Dim myRange as Range 

Dim myArray(2) as String 
myArray = {"cat", "dog", "bird"} 

Dim reqName as String 

Ich bin auch kein Experte, versuche nur zu helfen! Fühlen Sie sich frei, irgendwelche Fragen zu stellen, aber ich kann nicht garantieren, dass ich eine Antwort habe.

Verwandte Themen