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