繁体   English   中英

VBA仅允许子程序在另一个子程序运行之后运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM