Vba 使用宏验证Excel中的空白字段

Vba 使用宏验证Excel中的空白字段,vba,excel,Vba,Excel,我在验证空白字段时有点困难 当我使用此代码打开一个文件时,它会打开该文件,检查该列中的应用程序编号(在我的示例中,应用程序编号位于第一列) 我想做的是,如果没有申请编号,那么它应该写出以下错误“在以下行编号处找到空白申请编号” “全局变量” 作为整数的Dim rErr ' '查找列中最后使用的行:本例中的列a ' 函数LastRowInOneColumn(ColNo作为字符串)的长度为 最后一排一样长 使用ActiveSheet LastRow=.Cells(.Rows.Count,ColNo)

我在验证空白字段时有点困难

当我使用此代码打开一个文件时,它会打开该文件,检查该列中的应用程序编号(在我的示例中,应用程序编号位于第一列)

我想做的是,如果没有申请编号,那么它应该写出以下错误“在以下行编号处找到空白申请编号”

“全局变量”
作为整数的Dim rErr
'
'查找列中最后使用的行:本例中的列a
'
函数LastRowInOneColumn(ColNo作为字符串)的长度为
最后一排一样长
使用ActiveSheet
LastRow=.Cells(.Rows.Count,ColNo).End(xlUp).Row
以
LastRowInOneColumn=LastRow
端函数
'
'查找行中最后使用的列:本例中的第1行
'
函数LastColumnInOneRow(行号作为字符串)
将LastCol设置为整数
使用ActiveSheet
LastCol=.Cells(1,.Columns.Count).End(xlToLeft).Column
以
LastColumnInOneRow=LastCol
'MsgBox LastCol
端函数
'
'查看申请编号
'
函数检查\u AppNo(AppNo、pRow、Lrow)为布尔值
检查\u AppNo=True
Dim MinAppNo,MaxAppNo为单个
米纳普诺=0
MaxAppNo=9999999#
如果(appNoMaxAppNo),则
工作表(“错误结果”)。单元格(rErr,1)=“第行的应用程序编号超出范围”&i
rErr=rErr+1
检查\u AppNo=False
如果结束
对于j=船头+1至左后
如果(appNo=工作表(“Sheet1”).单元格(j,1)),则
工作表(“错误结果”)。单元格(rErr,1)=“行和船首和”以及“&j处重复的应用程序编号”
rErr=rErr+1
检查\u AppNo=False
如果结束
下一个j
端函数
函数OpenFile()作为字符串
NewFN=Application.GetOpenFilename(文件过滤器:=“Excel文件(*.xls*),*.xls*”,标题:=“请选择一个文件”)
如果NewFN=False,则
他们按了取消
OpenFile=“”
“MsgBox”正在停止,因为您没有选择文件
退出功能
其他的
工作簿。打开的文件名:=NewFN
IPO=InStr(1,新编号,“\”)+1
ipos1=0
做
ipos1=InStr(首次公开募股,新fn,“\”)+1
如果(ipos1)那么
首次公开募股=首次公开募股1
如果结束
循环直到(ipos1=1)
OpenFile=Mid(新FN、IPO、Len(新FN)-IPO+1)
如果结束
端函数
子添加工作表(fName作为字符串,sName作为字符串)
将工作表设置为工作表
工作簿(fName)。激活
出错时继续下一步
设置wSheet=工作表(sName)
如果wSheet什么都不是,那么
Worksheets.Add().Name=sName
其他的
工作表(sName)。清除
如果结束
错误转到0
端接头
子验证()
作为字符串的Dim fName
像线一样模糊
变暗标志
fName=OpenFile()'打开所需的数据文件
如果(fName=“”)那么
出口接头
如果结束
调用AddWorkSheet(fName,“错误结果”)'将错误工作表添加到数据Excel文件
rErr=1
工作表(“表1”)。选择
LastRow=LastRowInOneColumn(“A”)'获取列中的最后一行
对于船头=2至最后一行
rerr1=rErr
appNo=工作表(“表1”).单元格(船头,1)
标志=检查应用号(应用号、船首、最后一行)
“下一个船头”处理错误结果工作表中的下一条记录
工作簿(fName).Close(True)'关闭已完成验证的打开工作簿
端接头
子按钮1\u单击()
呼叫验证
端接头
按照以下步骤运行代码:

  • 步骤1:首先制作一个名为“abc1”的excel文件
  • 步骤2:在该文件的第1列中,将其标题指定为“应用程序编号”
  • 第三步:现在在其中输入申请编号(任何您想要的编号),并在其间保留一个单元格为空
  • 第4步:使另一个excel文件显示“validator”
  • 第5步:在该位置显示“开发人员”选项卡中的按钮
  • 步骤6:在“开发人员”选项卡中,单击visual basic
  • 步骤7:您将看到一个visual basic编辑器
  • 步骤8:在左侧,您将看到一个项目浏览器窗口,在该窗口中,右键单击粗体名称>选择插入>模块
  • 步骤9:然后复制并粘贴上述代码
  • 步骤10:保存它,并将excel文件另存为启用宏的文件
  • 步骤11:现在打开“validator”文件,在该文件中单击按钮运行代码
你会明白我想说什么,如果你看到代码,很容易理解


希望,任何人都能在这方面帮助我

嗯,我不确定我是否做对了,因为它看起来很简单,但你是否在寻找类似于:

Sub Test()

dim lAppNo as long
dim sError as string 
dim lRow as long
dim lLastRow as long
dim bFlag as boolean

For lRow = 2 To lLastRow            

    rerr1 = rErr            

    lappNo = Worksheets("Sheet1").Cells(lRow, 1).value

    'Or put this in a function if you want to
    if lAppNO = 0 then 
        sError = "Blank application number found at following Row number " & lRow
        Call Write_Error(sError)
    end if

    bFlag = Check_AppNo(lAppNo, lRow, lLastRow)            

Next lRow  
End Sub

Sub Write_Error(sError As String)

Dim sPath               As String
Dim sFile               As String
Dim oBook               As Excel.Workbook
Dim oSheet              As Excel.Worksheet
Dim oRange              As Excel.Range
Dim iRange_Row          As Integer


sPath = "U:/"
sFile = "Errors.xls"
Set oBook = Workbooks.Open(sPath & sFile)
Set oSheet = oBook.Sheets("Errors")

If oSheet.Range("A1") <> "" Then
    Set oRange = oSheet.UsedRange
    iRange_Row = oRange.Rows.Count + 1
    oSheet.Cells(iRange_Row, 1).Value = Now
    oSheet.Cells(iRange_Row, 2).Value = sError
Else
    oSheet.Range("A1").Value = Now
    oSheet.Range("B1").Value = sError
End If

oBook.Save
oBook.Close

Set oRange = Nothing
Set oSheet = Nothing
Set oBook = Nothing

End Sub
子测试()
暗淡的拉普诺像长的一样
像绳子一样模糊的镜子
暗淡的光线和长的一样
昏暗的灯塔一样长
作为布尔值的dim bFlag
对于lRow=2至lLastRow
rerr1=rErr
lappNo=工作表(“表1”).单元格(lRow,1).值
'或者如果愿意,将其放入函数中
如果lAppNO=0,则
sError=“在以下行编号处找到空白申请编号”&lRow
调用写入错误(sError)
如果结束
bFlag=检查应用号(lAppNo、lRow、lLastRow)
下一条路
端接头
子写入错误(错误为字符串)
像细绳一样暗淡
将文件设置为字符串
将oBook设置为Excel.Workbook
将oSheet设置为Excel.工作表
淡橙色如Excel.Range
Dim iRange_行作为整数
sPath=“U:/”
sFile=“Errors.xls”
设置oBook=工作簿。打开(sPath和sFile)
设置oSheet=oBook.Sheets(“错误”)
如果oSheet.范围(“A1”)“那么
设置橙色=oSheet.UsedRange
iRange_Row=oRange.Rows.Count+1
oSheet.Cells(iRange_行,1).Value=Now
oSheet.Cells(iRange_行,2)。值=错误
其他的
oSheet.范围(“A1”).值=现在
oSheet.范围(“B1”)。值=错误
如果结束
好的,救命
好的,关上
设置为橙色=无
设置oSheet=Nothing
设置oBook=Nothing
端接头
如果单元格为空,则值为
Sub Test()

dim lAppNo as long
dim sError as string 
dim lRow as long
dim lLastRow as long
dim bFlag as boolean

For lRow = 2 To lLastRow            

    rerr1 = rErr            

    lappNo = Worksheets("Sheet1").Cells(lRow, 1).value

    'Or put this in a function if you want to
    if lAppNO = 0 then 
        sError = "Blank application number found at following Row number " & lRow
        Call Write_Error(sError)
    end if

    bFlag = Check_AppNo(lAppNo, lRow, lLastRow)            

Next lRow  
End Sub

Sub Write_Error(sError As String)

Dim sPath               As String
Dim sFile               As String
Dim oBook               As Excel.Workbook
Dim oSheet              As Excel.Worksheet
Dim oRange              As Excel.Range
Dim iRange_Row          As Integer


sPath = "U:/"
sFile = "Errors.xls"
Set oBook = Workbooks.Open(sPath & sFile)
Set oSheet = oBook.Sheets("Errors")

If oSheet.Range("A1") <> "" Then
    Set oRange = oSheet.UsedRange
    iRange_Row = oRange.Rows.Count + 1
    oSheet.Cells(iRange_Row, 1).Value = Now
    oSheet.Cells(iRange_Row, 2).Value = sError
Else
    oSheet.Range("A1").Value = Now
    oSheet.Range("B1").Value = sError
End If

oBook.Save
oBook.Close

Set oRange = Nothing
Set oSheet = Nothing
Set oBook = Nothing

End Sub