尽管这似乎是一个普遍的问题,但我没有找到对我的问题有用的东西。我有一个简单的旧代码,在一张纸上有一张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)
答案 0 :(得分:3)
这是我usually use的WorksheetExists()
函数:
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个组件:
这个想法是,在完成所有操作之后,检查每个工作表名称,直到找到所需的工作表为止。如果找不到,则跳到其他地方。
因此,在数据透视表部分之后,也许我会做类似的事情:
'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。检查此链接以获取更多信息:
答案 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