在VBA中,如何将字段的设置变量名从一个子例程传递到另一个子例程?
所以,我有两个子例程 第一个用于导入工作表,第二个用于在特定条件成立时删除空行 我想将已导入的工作表的名称传递到在VBA中,如何将字段的设置变量名从一个子例程传递到另一个子例程?,vba,excel,Vba,Excel,所以,我有两个子例程 第一个用于导入工作表,第二个用于在特定条件成立时删除空行 我想将已导入的工作表的名称传递到deletebankcells()子例程。我想这就是我们正在设置的Set wsSht=.Sheets(sWSName)变量 在第二个子例程中,您可以看到硬编码的图纸值,我想用导入传入的值替换该值 这是第一个子例程: Sub ImportSheet() Dim sImportFile As String, sFile As String Dim sThisBk As Workbook D
deletebankcells()
子例程。我想这就是我们正在设置的Set wsSht=.Sheets(sWSName)
变量
在第二个子例程中,您可以看到硬编码的图纸值,我想用导入传入的值替换该值
这是第一个子例程:
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
这是第二个子例程:
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
您可以在
工作表
本身上进行搜索,无需使用工作表的名称
在第二个子菜单中,更改为:
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)
与:
或者,可能是一个全局变量?(这是一种很难实现的方法)
我们必须在第一小节中调用它吗?只是我有两个单独的控制按钮来执行这些子程序?我想把它们隔离起来?@ToofuWarrior那么你可以将
wsSht
声明为Global
变量,你想这样做吗?你知道怎么做吗?我不知道怎么做,但我也只是想。。。或者,我可以导入工作表,然后在导入过程中将其重命名为硬编码值?@ToofuWarrior有很多方法可以实现它,我回答你的posr,标题是“如何在VBA中将字段的设置变量名从一个子例程传递到另一个子例程?”是的,你做到了!谢谢朋友