使用复选框打开工作簿作为对象从Ms-Word和查找文本,删除整行然后关闭工作簿

时间:2017-09-27 08:05:01

标签: excel-vba object for-loop word-vba userform

我的情况是我从Workbook打开MS Word,在那里我找到了一些文本并删除了找到文本的整行。为了实现这一点,我使用Userform具有复选框和按钮。下面的代码循环显示所有复选框,如果C.Value返回True,则按 CEEMEA 按钮执行操作。

我遇到Excel Object命名Xc的问题。

我第一次运行 CEEMEA 宏,它运行正常(打开工作簿 - >查找文本 - >删除行 - >关闭工作簿等);

但是第二次,它返回错误 Run-time Error '13': Type mismatch,到目前为止我认为第一次运行时可能会留下一些东西,我没有退出/关闭/设置为空,(重复工作簿)

我检查了所有拼写,一切都正确。

我最后有Xc.QuitSet Xc= Nothing

我不明白它出了什么问题。我在第一次运行时可能会遇到QuitSetNothing的问题。我把整个代码放在下面。请帮助...

如果有更好的方式做这项工作,请提出建议。

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

1 个答案:

答案 0 :(得分:1)

您无需打开工作簿并使其可见。这可能对你有用。如果存在,Workbooks.close将关闭所有工作簿。

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