簡體   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