`Range("P" & Sheetfind).NumberFormat = "dd mmmm yyyy"tb = Range("P" & Sheetfind).Text
Workbooks.Open Filename:="\\data\Hq\Work Returns\QC\" & Selection.Value & ".xlsx", ReadOnly:=True
Sheets(tb).Select
Workbooks(usersname & ".xlsx").Activate
Set WB2 = ActiveWorkbook
' Put stuff
Range("B2:d2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ThisWorkbook.Activate
Sheets("Prep sheet").Select
Range("B" & movedown).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheetfind = Sheetfind + 1`
你好Excel专家
如上所述,我提供了代码,该代码实际上打开了一个使用Excel中的单元格指定的名称的文档,并找到了与单元格P1中的值具有相同名称的选项卡(因为Sheetfind为1,在代码的前面已定义)并从中获取数据。这里没有问题,工作正常。
我的问题是,如果该特定工作表不存在,则会发生错误,例如,如果代码正在查找``2018年7月14日''并且该工作表不是由搜索人员创建的。在找到匹配项之前,我无法找出在P列中的日期范围之间循环的方法。
我认为sheetfind +1可能会起作用,因为它会从“p1”变为“p2”,但是我不知道该怎么做。在这种情况下,P2为“2018年7月13日”。
任何建议都将不胜感激-谢谢大家。
最佳答案
While I generally advise against using this whenever possible, as it leads to bad coding habits of "when something doesn't work, simply supress it", there are some cases (usually with opening/checking availability of
Workbooks
,Worksheets
, etc when it can prove actually useful)
On Error Resume Next 'or you can refer to a block: instead of Next
一起抑制错误,直到收到回调
On Error GoTo 0
将VBA切换为默认错误处理。
因此,将整个容器包装在其中可以抑制任何潜在的错误。
但是正如我所提到的,人们经常倾向于(过度)依赖于错误抑制而不是自己亲自进行适当的编码。
您应该问自己的正确的心态和问题是,如何在不完全依赖错误处理的情况下解决此问题?
在许多情况下(包括此情况),我们可以采取简单的方法来消除任何潜在的错误,或者我们可以实际进行一些适当的编码并以适当的方式解决问题!
Now I found it unclear, what exactly you're trying to do from your original code snippet. I presumed that you're trying to copy-paste range
B2:D2
if found, but if not, just edit the code inside theif
condition
Function inArray(ByVal what As String, ByVal in_array As Variant) As Boolean
inArray = (UBound(Filter(in_array, what)) > -1)
' returns true if found, otherwise false
End Function
Private Sub check_sheets()
Dim lr As Long ' last (active) row
lr = Sheets("default").Cells(Rows.Count, "P").End(xlUp).Row
Dim sheetnames() As String ' create array for our sheets
ReDim sheetnames(1 To ThisWorkbook.Sheets.Count) ' size allocation
Dim i As Long
For i = 1 To ThisWorkbook.Sheets.Count
sheetnames(i) = Sheets(i).Name ' store sheetname inside array
Next i
Dim cell As Range ' looping through column P
For Each cell In Sheets("default").Range("P1:P" & lr)
If (inArray(cell.Value2, sheetnames) = True) Then
' worksheet found, do something...
Sheets("default").Range("B2:D2").Copy
Sheets(cell.Value2).Range("B2").PasteSpecial xlPasteValues
Else
' worksheet not found, maybe do something...?
MsgBox ("Sheet " & cell.Value2 & " not found!")
End If
Next cell
End Sub
This answer also presumes that the column P with sheetnames is in a Worksheet called "
default
"
通常,您可以看到我的答案包含很多变量,但是不幸的是,如果没有明确说明问题,就会发生这种情况。
无论哪种方式,无论您要实现什么,这个答案都应该足够了。
关于excel - Excel VBA中不存在选项卡时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669860/