我需要幫助找出問題所在。我寫了一段很長的代碼,基本上通過分離和組合不同作業表上的資訊來重新格式化作業簿,然后將每張作業表分別保存為 CSV。這是我的代碼的開頭:
Sub All()
Dim Bottom As Long
Dim Header As Long
> 'A. CHECK DATE
If ThisWorkbook.Sheets("ACH PULL").Range("C1") <> Date Then
MsgBox "ERROR" & Chr(10) & "Date on file is different than today's date" & Chr(13) & "Ask client for corrected file"
Exit Sub
Else
> '1. OUTGOING CHECKS
Sheets("OUTGOING CHECKS").Select
Bottom = WorksheetFunction.Match((Cells(Rows.Count, 1).End(xlUp)), Range("A:A"), 0)
Header = WorksheetFunction.Match("Account*", Range("A:A"), 0)
If Bottom <> Header Then
MsgBox "ERROR" & Chr(10) & "The batch contains outgoing checks" & Chr(13) & "Ask client for corrected file"
Exit Sub
Bottom 和 Header 分別用于查找范圍的標題和最后一行。我在單獨的作業表上的代碼中多次使用它。
當我從我需要修改的檔案運行代碼時,代碼運行良好。但是我需要將它分配給另一個電子表格的按鈕,以通過VBA打開要修改的檔案,然后應用代碼。所以我添加了這個:
Sub All() Dim FileToOpen As Variant Dim NewBatch As Workbook Dim Bottom As Integer Dim Header As Integer FileToOpen = Application.GetOpenFilename(Title:="Find batch file") If FileToOpen <> False Then Set NewBatch = Application.Workbooks.Open(FileToOpen) End If 'A. CHECK DATE If Sheets("ACH PULL").Range("C1") <> Date Then MsgBox "ERROR" & Chr(10) & "Date on file is different than today's date" & Chr(13) & "Ask client for corrected file" Exit Sub Else '1. OUTGOING CHECKS Sheets("OUTGOING CHECKS").Select Bottom = WorksheetFunction.Match((Cells(Rows.Count, 1).End(xlUp)), Range("A:A"), 0) Header = WorksheetFunction.Match("Account*", Range("A:A"), 0) End If If Bottom <> Header Then MsgBox "ERROR" & Chr(10) & "The batch contains outgoing checks" & Chr(13) & "Ask client for corrected file" Exit Sub .. The rest of the code
現在,當我嘗試運行它時,一切順利,直到出現以下行:
底部 = WorksheetFunction.Match((Cells(Rows.Count, 1).End(xlUp)), Range("A:A"), 0)
我得到 1004 或 400 錯誤。我調暗了我需要使用的兩個整數,我嘗試進行多項更改,包括激活作業簿,但仍然不確定是什么導致了這部分代碼中的問題。
我有兩個部分(VBA 打開作業簿和重新格式化代碼)分開作業,但我不能將它們組合起來!
在使用它們之前,我將需要使用的兩個整數調暗。我嘗試進行多項更改,包括
NewBatch.Activate
但這實際上并沒有什么不同,因為打開的作業簿已經被激活。我嘗試設定 Bottom 和 Header 的值,但這也不起作用。
謝謝!
uj5u.com熱心網友回復:
可能是這樣的:
Sub All()
Dim FileToOpen As Variant
Dim NewBatch As Workbook
Dim Bottom As Long, Header As Variant 'not Long
FileToOpen = Application.GetOpenFilename(Title:="Find batch file")
If FileToOpen = False Then Exit Sub 'user cancelled open
Set NewBatch = Application.Workbooks.Open(FileToOpen)
'A. CHECK DATE
If NewBatch.Sheets("ACH PULL").Range("C1").Value <> Date Then
ProblemMsg "Date on file is different than today's date." & _
vbLf & "Ask client for corrected file"
Exit Sub
End If
'1. OUTGOING CHECKS
With NewBatch.Sheets("OUTGOING CHECKS")
Bottom = .Cells(.Rows.Count, 1).End(xlUp).Row 'last entry in Col A
Header = Application.Match("Account*", .Range("A:A"), 0) 'not WorksheetFunction.Match
If IsError(Header) Then 'make sure we located "Account*"
ProblemMsg "'Account*' not found in ColA on sheet '" & .Name & "'"
Else
If Bottom <> Header Then
ProblemMsg "The batch contains outgoing checks." & vbLf & _
"Ask client for corrected file."
Exit Sub
End If
End If
End With
'...
'...
End Sub
'Utility sub for displaying error messages
Sub ProblemMsg(msg As String)
MsgBox "ERROR" & vbLf & msg, vbExclamation, "Please review"
End Sub
uj5u.com熱心網友回復:
通過定義作業表和參考而不是依賴選擇或活動表,我發現了更可靠的性能。嘗試在 range() 和 cells() 參考之前定義正在執行此行并參考的作業表,看看是否有幫助。
Dim ws as Worksheet Set ws = Sheets("外出支票")
底部 = WorksheetFunction.Match((ws.Cells(Rows.Count, 1).End(xlUp)), ws.Range("A:A"), 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/536519.html