如果代码中存在工作表,则为VBA

时间:2018-10-02 08:23:18

标签: excel vba

尽管这似乎是一个普遍的问题,但我没有找到对我的问题有用的东西。我有一个简单的旧代码,在一张纸上有一张compnies数据表。我的代码根据公司名称获取数据,在工作簿中查找具有该公司名称的工作表,并执行少量操作。

当其中一张纸被删除并且代码卡住时,我的问题开始了。我在代码中对每个公司都使用相同的例程,如果不找到具有特定公司名称的工作表,我希望它可以用于下一个公司。

有人可以帮忙做些if语句吗?

这是代码的开头,例如两家公司-YEDIDIM&BEHIRIM。否则相同:

Sub Calculation_of_Change()

Application.ScreenUpdating = False

'refresh 2 PivoTableS
Dim pivot As PivotTable
Set pivot = Worksheets("PIVOT").PivotTables("PivotTable1")
pivot.RefreshTable
Set pivot = Sheets("PIVOT (-)").PivotTables("PivotTable1")
pivot.RefreshTable

'we need to delete the old data and replace it with new data

'YEDIDIM
'first we will delete all old data
Sheets("YEDIDIM").Select
Range("A2", Range("A2").End(xlDown)).Select
Selection.EntireRow.Delete


'for each sheet with data we will filter the PIVOT table and paste the new data so we could calculate the stats we want
    Sheets("PIVOT").Activate
    ActiveSheet.PivotTables("PivotTable1").PivotFields("ùí úú îôòì"). _
        ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("ùí úú îôòì").PivotFilters. _
        Add2 Type:=xlCaptionContains, Value1:="YEDIDIM"

    Range("A5", Range("A5").End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("YEDIDIM").Select
    Range("A2").PasteSpecial (xlPasteValues)


'BEHIRIM
'first we will delete all old data
Sheets("BEHIRIM").Select
Range("A2", Range("A2").End(xlDown)).Select
Selection.EntireRow.Delete


'for each sheet with data we will filter the PIVOT table and paste the new data so we could calculate the stats we want
Sheets("PIVOT").Activate
    ActiveSheet.PivotTables("PivotTable1").PivotFields("ùí úú îôòì"). _
        ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("ùí úú îôòì").PivotFilters. _
        Add2 Type:=xlCaptionContains, Value1:="BEHIRIM"

    Range("A5", Range("A5").End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("BEHIRIM").Select
    Range("A2").PasteSpecial (xlPasteValues)

4 个答案:

答案 0 :(得分:3)

这是我usually useWorksheetExists()函数:

Function WorksheetExists(sheetName As String) As Boolean        
    WorksheetExists = Not WorksheetFunction.IsErr(Evaluate("'" & sheetName & "'!A1"))
End Function

对于您的目标,可以这样使用:

If Not WorksheetExists("NameOfTheWorksheet") Then Exit Sub

答案 1 :(得分:1)

我建议您为此使用2个组件:

  1. 布尔变量
  2. 一个循环,它将在选择之前检查每张纸

这个想法是,在完成所有操作之后,检查每个工作表名称,直到找到所需的工作表为止。如果找不到,则跳到其他地方。

因此,在数据透视表部分之后,也许我会做类似的事情:

'check if sheet exists
Dim wk As Worksheet
Dim wkFound As Boolean
wkFound = False
For Each wk In ThisWorkbook.Worksheets
    If wk.Name = "YEDIDIM" Then
        wkFound = True
        Exit For 'no need of checking rest of worksheets if found
    End If
Next wk

'If desired worksheet is found, then we execute code

If wkFound = True Then
    Range("A5", Range("A5").End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("YEDIDIM").Select
    Range("A2").PasteSpecial (xlPasteValues)
End If

关于您的代码,强烈建议您避免使用select。检查此链接以获取更多信息:

  

Avoid SELECT in VBA

答案 2 :(得分:1)

您可以通过简单的错误处理来做到这一点。

Err.Clear    
On error resume next
Set ws = Worksheets("SomeName")
if err.Number > 0 then exit sub
On error goto 0    'disable error handling

答案 3 :(得分:-1)

也许您可以检查所有工作表中的名称。 伪代码

For Each ws In Worksheets
     if 'name' == ws.Name