只有允许子运行后,另一个已经运行的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