VBA运行时错误91-对象变量或未设置块变量

问题描述 投票:0回答:1

感谢您提供指导。我是编码的新手,这让我很困惑。

尽管它确实按预期工作,但我始终收到带有以下代码的运行时错误91。

错误发生在Set wd = wb.Sheets("Sitel Audit"),尽管它已从活动工作表准确地拉到名为Sitel Audit的新工作表。

Private Sub Extract()


Dim FileYear As String
Dim FileMonth As String
Dim AgentName As String
Dim Agreement As String
Dim CallDate As String
Dim wb As Workbook
Dim wd As Worksheet
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim e As String
Dim f As String
Dim g As String
Dim h As String
Dim i As String
Dim j As String
Dim k As String
Dim l As String
Dim m As String
Dim n As String
Dim o As String
Dim p As String
Dim q As String
Dim r As String
Dim found As Range
Dim wtf As Range

Set wb = Workbooks.Open("C:\Users\matthew.varnham\Desktop\QA Improvements\SITEL - Inbound Tracker.xlsm")
Set wd = wb.Sheets("Sitel Audit")
Set wtf = Sheets("Observation Sheet").Range("E8")
Set found = wd.Columns("E:E").find(what:=wtf, LookIn:=xlValues, lookat:=xlWhole)

Set wss = Sheets("Observation Sheet")
a = wss.Range("F17").Value '1
b = wss.Range("F20").Value '2
c = wss.Range("F21").Value '3
d = wss.Range("F22").Value '4
e = wss.Range("F23").Value '5
f = wss.Range("F26").Value '6
g = wss.Range("F27").Value '7
h = wss.Range("F28").Value '8
i = wss.Range("F30").Value '9
j = wss.Range("F31").Value '10
k = wss.Range("F34").Value '11
l = wss.Range("F35").Value '12
m = wss.Range("F36").Value '13
n = wss.Range("F37").Value '14
o = wss.Range("F40").Value '15
p = wss.Range("F41").Value '16
q = wss.Range("F44").Value '17
r = wss.Range("F47").Value '18



wd.Range("P" & found.Row).Value = a
wd.Range("Q" & found.Row).Value = b
wd.Range("R" & found.Row).Value = c
wd.Range("S" & found.Row).Value = d
wd.Range("T" & found.Row).Value = e
wd.Range("U" & found.Row).Value = f
wd.Range("Y" & found.Row).Value = g
wd.Range("Z" & found.Row).Value = h
wd.Range("AB" & found.Row).Value = i
wd.Range("AC" & found.Row).Value = j
wd.Range("AD" & found.Row).Value = k
wd.Range("AE" & found.Row).Value = l
wd.Range("AF" & found.Row).Value = m
wd.Range("AG" & found.Row).Value = n
wd.Range("AH" & found.Row).Value = o
wd.Range("AI" & found.Row).Value = p
wd.Range("AJ" & found.Row).Value = q
wd.Range("AK" & found.Row).Value = r

wb.Save
Workbooks(1).Close

End Sub

感谢您的帮助!

excel-vba runtime-error
1个回答
0
投票

我通过引入数组为您减少了很多代码:

Private Sub Extract()

Dim CopyArray As Variant, PasteArray As Variant, X As Long, FileYear As String, FileMonth As String, AgentName As String, Agreement As String
Dim CallDate As String, wb As Workbook, wd As Worksheet, found As Range, wtf As Range

Set wb = Workbooks.Open("C:\Users\matthew.varnham\Desktop\QA Improvements\SITEL - Inbound Tracker.xlsm")
Set wd = wb.Sheets("Sitel Audit")
Set wtf = Sheets("Observation Sheet").Range("E8")
Set found = wd.Columns("E:E").Find(what:=wtf, LookIn:=xlValues, lookat:=xlWhole)
Set wss = Sheets("Observation Sheet")
CopyArray = Array(17, 20, 21, 22, 23, 26, 27, 28, 30, 31, 34, 35, 36, 37, 40, 41, 44, 47)
PasteArray = Array("P", "Q", "R", "S", "T", "U", "Y", "Z", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK")

For X = LBound(CopyArray) To UBound(CopyArray)
    wd.Range(PasteArray(X) & found.Row).Value = wss.Range("F" & CopyArray(X)).Value
Next

wb.Save
Workbooks(1).Close

End Sub

通过手动打开工作簿并使用调试窗口(ctrl-g)并键入(包括问号)?Sheets("Sitel Audit").name,测试您是否正确拼写了工作表

如果返回名称,那么我们知道一切都会好的,因此我们可以开始寻找其他可能性。

如果错误,则工作表名称错误。

© www.soinside.com 2019 - 2024. All rights reserved.