我正在处理包含三个数据工作表的工作簿。每个工作表都有一个合同编号栏。必须排除某些合同并在单独的工作表中注明。查找Excel工作簿的工作表名称和行号
我想创建Excel的VBA宏:
- 提示用户输入特定的合同编号,被排除
- 房屋合同号
- 搜索所有三个工作表合同列合同号码
- 注意“摘要”工作表中已经创建的不需要的合同详细信息
- 完全删除不需要的合同行
宏应循环执行以下过程,以查找用户输入的'n'个合同。
Public contString As String
Public x As Variant
Public xCount As Variant
Sub find()
contString = InputBox(Prompt:="Enter contract numbers to exclude(Comma Delimited). Cancel to include all contracts.", _
Title:="Exclude Contracts", Default:="1715478")
x = Split(contString, ",")
xCount = UBound(x) 'Number of contracts entered by user
End Sub
Sub SearchWS1()
Sheets("WS1").Activate
Columns("I:I").Select 'Contract Number Column
Selection.find(What:=x(i), After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
BKWS = ActiveCell.Worksheet.Name
BKRow = ActiveCell.Row
If BKRow > 0 Then
Cname = Range("G" & BKRow)
Cnumber = Range("I" & BKRow)
Cvalue = Range("K" & BKRow)
'Summarize Excluded Contract Info on Summary WS
Range("Summary!B25").Value = "Exclusions:"
Range("Summary!B26").Value = Cnumber
Range("Summary!C26").Value = Cname
Range("Summary!D26").Value = Cvalue
'Select and Delete Contract
Rows(ActiveCell.Row).Select
Rows(BKRow).EntireRow.Delete
Else
Call SearchWS2 'SearchWS2 is essentially the same as SearchWS1 and Calls SearchWS3 if contract isn't found.
End If
End Sub
如果合同编号在第一个WS中不存在,则会出现类似'Object variable或With block not set'的错误。一旦我可以修复这个错误,我将需要通过一个循环来运行这个过程,以获得用户输入的每个合同编号。任何帮助调试错误或建立一个循环,这将不胜感激。
谢谢!
您可以通过录制宏并调整代码来从VBA开始。试一试,告诉我们你卡在哪里 – JMax
嘿JMax,我对它进行了刺探。请参阅上面的编辑。有什么建议? – AME
我很难搞清楚你想要什么 - 你指的是用户指定了x个合同,并且你想要返回(以什么形式?)包含合同的工作表/单元格号。但在顶部,你会说“需要排除”。这是什么?还是你想移出3张数据母表,这样3张纸上的实际工作就可以完成了? – aevanko