只有允许子运行后,另一个已经运行的VBA

我创build了一个工作簿,从其他文件导入数据,然后通过查找头string“Time”删除任何行。 但是,如果删除行的macros再次运行,它将删除标题,因为还有一个名为“Time”的子标题。

或有没有办法限制字符查找search即ie说我的subheader是实时和我的字符限制是4,find应该只返回“真实”,因此忽略?

我想要做的是禁用行删除代码,除非有一个新的数据导入和行删除尚未运行。

下面有一些伪码

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过程最后运行(因为单元格显示“Imported”),则可以运行rowDelete过程。

如何使用CustomDocumentProperties来代替。 使其更隐形:

 ThisWorkbook.CustomDocumentProperties("Imported") 

你可以使这是一个是/否的财产

你可以使用全局variables来识别,下面的工作是否适合你?

确保在循环开始时调用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