[英]Only allow sub to run after another has been run VBA
我创建了一个工作簿,该工作簿从另一个文件导入数据,然后通过查找标题字符串“ Time”删除任何行。 但是,如果删除行的宏再次运行,它将删除标头,因为还有一个名为“ Time”的子标头。
或有没有一种方法来限制字符的查找,即搜索说我的子标题是实时且我的字符数限制是4,查找应该只返回“真实”,因此可以忽略它?
我想做的是禁用行删除代码,除非有新的数据导入并且行删除尚未运行。
下面的一些伪代码
If (DataImport has been run){
If (rowDelete has been run since DataImport){
return;
}
else{
run rowDelete
}
}
Excel VBA
Sub ImportData()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim sheet As Worksheet
Dim pastestart As Range
Set wb1 = ActiveWorkbook 'Sheets("Data")
Set pastestart = [Data!A1]
FileToOpen = Application.GetOpenFilename _
(Title:="Please choose a data file")
If FileToOpen = False Then
MsgBox "No File Specified.", vbExclamation, "error"
Exit Sub
Else
Set wb2 = Workbooks.Open(Filename:=FileToOpen)
For Each sheet In wb2.Sheets
With sheet.UsedRange
.Copy pastestart
Set pastestart = pastestart.Offset(.Rows.Count)
End With
Next sheet
End If
wb2.Close
End Sub
_____________________________________________________________________
Sub rowDelete()
Dim FindRow As Range
On Error Resume Next
With Sheets("Data")
Set FindRow = Cells.Find(What:="Time", After:=.Cells(1, 1), LookIn:=xlValues, LookAt:= _
xlPart, MatchCase:=False)
End With
On Error GoTo 0
Range("A1", FindRow).EntireRow.Delete
End Sub
您可以在工作表上包括一个单元格,该单元格说明自上一行删除后是否进行了导入; 在ImportData
过程的末尾添加一行代码,以更新此单元格。
ThisWorkbook.Sheets(1).Range("A1") = "Imported"
然后,在rowDelete
过程结束时,您可以更新此单元格以反映行已被删除。
ThisWorkbook.Sheets(1).Range("A1") = "Rows deleted"
然后,在rowDelete
过程中,您可以检查最后要运行的过程是否是rowDelete
。 如果是这样,请勿运行该过程。
If ThisWorkbook.Sheets(1).Range("A1") = "Rows deleted" Then
Exit Sub
End If
如果该单元格显示ImportData
过程最后一次运行(因为该单元格显示“已导入”),则可以运行rowDelete
过程。
如何改用CustomDocumentProperties。 使它更加不可见:
ThisWorkbook.CustomDocumentProperties("Imported")
您可以将此属性设置为是/否
您可以使用全局变量来识别,以下内容对您有用吗?
确保在周期开始时调用InitiParams
Dim Option Explicit
'Module Level Variables
Dim boolDataImportComplete as boolean
Dim boolRowDeleteRunComplete as boolean
Sub InitParams()
boolDataImportComplete = False
boolRowDeleteRunComplete = False
End Sub
Sub ImportData()
''' Your Code here
boolDataImportComplete = True
End Sub
Sub RowDelete()
''' YOUR Code here
boolRowDeleteRunComplete = True
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.