我创建了一个从另一个文件导入数据的工作簿,然后通过查找标题字符串“Time”来删除任何行。但是,如果再次运行删除行的宏,它将删除标题,因为还有一个名为“Time”的子标题。
OR有没有办法限制字符查找搜索,即说我的副标题是实时,我的字符限制是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
答案 0 :(得分:3)
您可以在工作表中包含一个单元格,该单元格指出自上一行删除后是否已导入;在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
过程可以运行。
答案 1 :(得分:1)
如何使用CustomDocumentProperties代替。使它更加隐形:
ThisWorkbook.CustomDocumentProperties("Imported")
您可以将此设为是/否属性
答案 2 :(得分:0)
你可以使用全局变量进行识别,下面的工作是否适用于你?
确保在循环开始时调用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