2017-09-27 1 views
0

Ma situation est que j'ouvre Workbook de MS Word où je trouve du texte et supprime toute la ligne de texte trouvé. Pour cela j'utilise Userform ayant des cases à cocher et des boutons. Le code ci-dessous passe en boucle dans toutes les cases à cocher et si C.Value renvoie True, il exécute l'action en appuyant sur Bouton CEEMEA. Je rencontre des problèmes avec Excel Object nommant Xc.Ouverture de classeur en tant qu'objet de Ms-Word et de texte de recherche à l'aide de case à cocher Supprimer la ligne entière puis fermer classeur

Pour la première fois que je cours CEEMEA macro il fonctionne correctement (Ouvre le classeur -> Rechercher le texte -> supprimer la ligne -> fermer le classeur, etc);

mais pour la deuxième fois, il renvoie l'erreur Run-time Error '13': Type mismatch., jusqu'à présent, je pense qu'il peut y avoir quelque chose à gauche, que je n'ai pas Quit/Close/mis à zéro, (duplication de classeur)

J'avais vérifié toutes les orthographes, Tout est correct. J'ai eu Xc.Quit à la fin, et Set Xc= Nothing.

Je n'ai pas compris où ça allait mal. Je pense qu'à la première exécution il y a peut-être quelque chose que je n'ai pas Quit ou Set à Nothing. Je mets tout le code ci-dessous. veuillez aider ...

S'il y a une meilleure façon de faire ce travail, veuillez le suggérer.

Dim Xc As Object 
Set Xc = CreateObject("Excel.Application") 
Xc.Visible = True 
Set Wb = Xc.Workbooks.Open("C:\Users\dell\Desktop\EMEA CEEMEA\EMEA CC FINAL LIST.xls") 

Dim C As MSForms.Control 
For Each C In Me.Controls 
    If TypeName(C) = "CheckBox" Then 
    If C.Value = True Then 
    If C.Caption = "Select All" Then 
    Else 

    Dim ff As String 
    ff = Trim(C.Caption) 
    With Wb 
     .Application.Sheets("Sheet2").Select 
     .Application.Range("A1").Select 

     .Application.Cells.Find(What:=ff, After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
     .Application.ActiveCell.Rows("1:1").EntireRow.Select 
     .Application.Selection.Delete Shift:=xlUp 
     .Application.Range("A1").Select 

    End With 

    End If 
    End If 
    End If 
Next C 

Wb.Close SaveChanges:=True 
Workbooks.Close 
Set Wb = Nothing 
Xc.Quit 
Set Xc = Nothing 
+0

Vous n'avez pas spécifié Worksheet. Essayez '.Worksheet (" SheetName "). Trouver ...' – AntiDrondert

Répondre

1

Vous n'avez pas besoin d'ouvrir le classeur en tant qu'objet. Cela peut fonctionner pour vous. workbooks.close avec fermer tous les classeurs s'il existe.

Dim WB As Workbook 
Set WB = Workbooks.Open("C:\Users\dell\Desktop\EMEA CEEMEA\EMEA CC FINAL LIST.xls") 
Dim C As MSForms.Control 
For Each C In Me.Controls 
If TypeName(C) = "CheckBox" Then 
If C.Value = True Then 
If C.Caption = "Select All" Then 
Else 


With WB 
    .Application.Sheets("Sheet2").Select 
    .Application.Range("A1").Select 

    .Application.Cells.Find(What:=C.Caption, After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Activate 

    .Application.ActiveCell.Rows("1:1").EntireRow.Select 
    .Application.Selection.Delete Shift:=xlUp 

End With 

End If 
End If 
End If 
Next C 

WB.Close SaveChanges:=True 
Workbooks.Close 
Set WB = Nothing