Excel 获取有关范围的错误消息

Excel 获取有关范围的错误消息,excel,inventory,invoice,vba,Excel,Inventory,Invoice,Vba,我收到的错误消息表明变量未定义。如果LCase(wb.Range(“Q”&i)=“y”,那么VB会将代码涂成红色。我不知道为什么 在每个范围内,只有列Q中带有“y”的行被粘贴,而不是所有其他行,这一点非常重要 我不得不将I改为2到500,j=2到20,但我担心我可能会得到不想粘贴到Sheet2(Materials_Estimate)中的列。我只想粘贴范围列 范围包括如下图所示的表2信息(B=文本,c=文本,D=文本,F=最多3个数字,G=字母y,H=文本,I=从表1复制的数量*成本计算) 有人能

我收到的错误消息表明变量未定义。如果LCase(wb.Range(“Q”&i)=“y”,那么VB会将代码涂成红色。我不知道为什么

在每个范围内,只有列Q中带有“y”的行被粘贴,而不是所有其他行,这一点非常重要

我不得不将I改为2到500,j=2到20,但我担心我可能会得到不想粘贴到Sheet2(Materials_Estimate)中的列。我只想粘贴范围列

范围包括如下图所示的表2信息(B=文本,c=文本,D=文本,F=最多3个数字,G=字母y,H=文本,I=从表1复制的数量*成本计算)

有人能帮我吗

[守则]

选项显式

次级估计2() Application.ScreenUpdating=False

'naming the workbook and worksheets and ranges
Dim ProjectBudgeting1 As Workbook
Dim Materials_Budget As Worksheet
Dim Materials_Estimate As Worksheet
Dim LowesFax As Worksheet
Dim HomeDepotFax As Worksheet
Dim SBath1 As Range
Dim SBath2 As Range
Dim SBed1 As Range
Dim SBed2 As Range
Dim SBed3 As Range
Dim SBed4 As Range
Dim SHall As Range
Dim SFP As Range
Dim SRP As Range
Dim SKit As Range
Dim SGar As Range
Dim BuyOA As Range
Dim SFlorida As Range
Dim TargetRange As Range
Dim ActiveWorksheet As Worksheet


'naming the worksheets and ranges in code
Set ProjectBudgeting1 = ActiveWorkbook
Set Materials_Budget = Worksheets("Materials_Budget")
Set Materials_Estimate = Worksheets("Materials_Estimate")
Set LowesFax = Worksheets("LowesFax")
Set HomeDepotFax = Worksheets("HomeDepotFax")
Set SBath1 = Range("Materials_Budget!Supplies_Bathroom1")
Set SBath2 = Range("Materials_Budget!Supplies_Bathroom2")
Set SBed1 = Range("Materials_Budget!Supplies_Bedroom1")
Set SBed2 = Range("Materials_Budget!Supplies_Bedroom2")
Set SBed3 = Range("Materials_Budget!Supplies_Bedroom3")
Set SBed4 = Range("Materials_Budget!Supplies_Bedroom4")
Set SHall = Range("Materials_Budget!Supplies_Hallway")
Set SFP = Range("Materials_Budget!Supplies_FrontPorch")
Set SRP = Range("Materials_Budget!Supplies_RearPorch")
Set SKit = Range("Materials_Budget!Supplies_Kitchen")
Set SGar = Range("Materials_Budget!Supplies_Garage")
Set SFlorida = Range("Materials_Budget!Supplies_Florida")
 'Here I'm calling out the column q and looking for a "Y"
Set BuyOA = Range("Materials_Budget!Buy_OrderApproval")
'Here I'm naming the source of the information that gets copied into other sheets
Set ActiveWorksheet = Materials_Budget
'Here is the sheet where the source cells are pasted
Set TargetRange = Range("Materials_Estimate!EstimateTableArea1")

'Looking for the "Y" in column q for duplicating and printing corresponding rows (i) and columns (j)
For i = 12 To 520
        Cells("Q", i) = "Row " & i & " Col " & j
For j = 2 To 20
If LCase(wb.Range("Q" & i) = "y" Then .AutoFilter
i = i + 1
    Range("Q" & i).Select
    i = i - 1
Next q
Next i

    For j = 1 To 5
        Cells(i, j) = "Row " & i & "   Col " & j
端接头

Application.ScreenUpdating = True

End With
端接头

Application.ScreenUpdating = True

End With
[Code/]

我看到很多错误

A)您尚未声明您的对象。例如,您需要将
SBath1、SBath2等声明为范围

B)您已将
ProjectBudgeting1
声明为工作簿,但随后将其用作工作表对象

C)设置范围时,完全限定它们

D)您的
wb
对象未声明。我强烈建议您在代码顶部使用
选项Explicit

E)您在
wb.Range(“Q12:Q”&LastRow”)中有一个额外的括号

F)避免使用
。选择

G)最后,我强烈建议在vba中忘记一个单词,即使用
End
停止代码。原因很简单。这就像使用
关机按钮切换计算机一样。
End
语句突然停止代码执行。此外,由其他程序持有的对象引用(如果有)也将无效

下面是关于代码外观的基本要点

Sub Estimating2()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng1 As Range, rng2 As Range

    Set wb = ActiveWorkbook '~~> Or ThisWorkbook?

    Set ws = wb.Sheets("Sheet1")

    With ws
        Set rng1 = .Range("Supplies_Bathroom1")
        Set rng2 = .Range("Supplies_Bathroom2")

        '
        '~~> And so on
        '

    End With
End Sub

Set SBath1=Range(“物料预算!用品浴室1”)
更改为
Set SBath1=Range(“用品浴室1”)
,其他类似。更不用说您将这些对象暗显为
Range
当系统查看代码时,我仍然会收到错误消息。我使用了上面的代码,但得到了运行时错误9,使用:Set ws=ProjectBudgeting1.Sheets(“物料预算、物料预算、LowsFax、HomeDepotFax”)或者我在使用设置为ws=wb的语句时遇到运行时错误424。Sheets(“Sheets1”)您能提供帮助吗?
1
ws
是工作表对象。不能在其中存储多张图纸<代码>2
关于“Set ws=wb.Sheets(“Sheets1”)”,您如何定义
ws
wb
?如上所述,我今天早些时候编辑了我的代码。wb设置为工作簿Dim PROJECTBUTTING1为工作簿,set PROJECTBUTTING1=活动工作簿,ws分别列在Dim Materials\U BUTTING as WORKEM、set Materials\U BUTTING=工作表(“物料\U预算”)和set Materials\U预算=工作表(“物料\U预算”)上方将HomeDepotFax=工作表(“HomeDepotFax”)Dim物料\u估算为工作表Dim LowesFax作为工作表Dim HomeDepotFax作为工作表