在VBA中,如何将一个字段的设置variables名称从一个子例程传递给另一个子例程?

所以,我有两个子例程。

第一个是导入工作表,第二个是删除空白行,如果一定的条件成立。

我想将已导入的工作表的名称传递给DeleteBlankCells()子例程。 我想这是我们Set wsSht = .Sheets(sWSName)variables。

在第二个子例程中,您可以看到我想用导入中传入的值replace的硬编码表单值。

这是第一个子程序:

 Sub ImportSheet() Dim sImportFile As String, sFile As String Dim sThisBk As Workbook Dim vfilename As Variant Application.ScreenUpdating = False Application.DisplayAlerts = False Set sThisBk = ActiveWorkbook sImportFile = Application.GetOpenFilename( _ FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook") If sImportFile = "False" Then MsgBox "No File Selected!" Exit Sub Else vfilename = Split(sImportFile, "\") sFile = vfilename(UBound(vfilename)) Application.Workbooks.Open Filename:=sImportFile Set wbBk = Workbooks(sFile) With wbBk If SheetExists(sWSName) Then Set wsSht = .Sheets(sWSName) wsSht.Copy after:=sThisBk.Sheets("Sheet3") Else MsgBox "There is no sheet with name :Raw_Data in:" & vbCr & .Name End If wbBk.Close SaveChanges:=False End With End If Application.ScreenUpdating = True Application.DisplayAlerts = True Sheets("Sheet1").Activate End Sub Private Function SheetExists(sWSName) As Boolean Dim ws As Worksheet On Error Resume Next sWSName = InputBox("Enter sheet name") Set ws = Worksheets(sWSName) If Not ws Is Nothing Then SheetExists = True End Function 

这是第二个子程序:

 Sub DeleteBlankCells() Dim Rng As Range Sheets("HARDCODED SHEET NAME").Activate Set Rng = Rows("1:1").Find(What:="HIVE_FIELD_TYPE", after:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) Sheets("HARDCODED SHEET NAME").Columns(Rng.EntireColumn.Address).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub 

您可以查看Worksheet本身,不需要使用工作表的名称。

在你的第二个Sub ,更改为:

 Sub DeleteBlankCells(ws As Worksheet) Dim Rng As Range With ws Set Rng = .Rows("1:1").Find(What:="HIVE_FIELD_TYPE", after:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) .Columns(Rng.EntireColumn.Address).SpecialCells(xlCellTypeBlanks).EntireRow.Delete End With End Sub 

然后在你的第一个Sub调用之后:

 Set wsSht = .Sheets(sWSName) 

附:

 DeleteBlankCells wsSht 

或者,也许是一个全局variables? (这是很难做到的)

如何将Excel VBA中的全局variables声明为在工作簿中可见