`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`
Hello Excel专家
如上所述,我提供了代码,该代码实际上打开了一个使用Excel单元格中指定的名称命名的文档,并找到了与单元格P1中的值具有相同名称的选项卡(因为Sheetfind为1,在之前的版本中已定义)代码)并从中获取数据。这里没有问题,工作正常。
我的问题是,如果该特定工作表不存在,则会发生错误,例如,如果代码正在查找“ 2018年7月14日”,并且该工作表不是由搜索对象创建的。在找到匹配项之前,我想不出一种方法来遍历P列中的日期范围。
我认为sheetfind +1可能会起作用,因为它会从“ p1”变为“ p2”,但是我不知道该怎么做。在这种情况下,P2为“ 2018年7月13日”。
任何建议都将受到高度赞赏-谢谢大家。
答案 0 :(得分:0)
虽然我通常建议不要在任何可能的地方使用它,因为它 导致的不良编码习惯。” 抑制它” ,在某些情况下(通常是打开/检查
Workbooks
,Worksheets
等的可用性可以证明 确实有用)
On Error Resume Next 'or you can refer to a block: instead of Next
一起抑制错误,直到收到回调
On Error GoTo 0
将VBA切换为默认错误处理。
因此,将所有可能的东西包裹在里面可以抑制任何潜在的错误。
但是正如我所提到的,人们经常倾向于(过度)依靠错误抑制功能,而不是自己亲自进行适当的编码。
您应该问自己的正确的心态和问题是,我该如何解决这个问题而无需完全依赖错误处理?
在许多情况下(包括此情况),我们可以采取简单的方法来排除任何潜在的错误,或者我们可以实际进行一些适当的编码并以适当的方式解决问题!
现在我还不清楚,您从原始代码段中到底要做什么。我认为您正在尝试复制粘贴范围
B2:D2
(如果找到),但如果没有,只需在if
条件内编辑代码
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
此答案还假定具有工作表名称的列P在名为“ {
default
”的工作表中
总的来说,您可以看到我的答案有很多变量,但是不幸的是,如果没有明确指定问题,就会发生这种情况。
无论哪种方式,无论您要实现什么,这个答案都应该足够了:)