我想創建一個自動填充我創建的工資表電子表格。然而,即使邏輯返回FALSE值(我使用MsgBox進行了驗證),無論我嘗試多少次z = 1的值。VBA excel如何在條件語句中繼續運行語句,即使它是假的?
此代碼中的目標是檢查另一張表中是否已有記錄。如果沒有,它會根據可用數據自動添加具有適當詳細信息的記錄。
以下是完整的VBA代碼(注意代碼是不完全,所以這是一個有點糙米仍然):
Option Explicit
Public p As Long
Sub test()
Dim Total_rows_PR As Long
Dim Total_rows_DTR As Long
Total_rows_PR = Worksheets("Payroll - Regular").Range("B" & Rows.Count).End(xlUp).Row
Total_rows_DTR = Worksheets("DTR").Range("B" & Rows.Count).End(xlUp).Row
Dim q As Long
Dim j As Long
Dim z As Long
For j = 1 To Total_rows_DTR - 1
For q = 1 To Total_rows_PR + p - 2
If Worksheets("DTR").Cells(1 + j, 33) = Worksheets("Payroll - Regular").Cells(2 + q, 1) Then
If Worksheets("DTR").Cells(1 + j, 34) = Worksheets("Payroll - Regular").Cells(2 + q, 2) Then
If Worksheets("DTR").Cells(1 + j, 2) = Worksheets("Payroll - Regular").Cells(2 + q, 3) Then
z = 1
Exit For
End If
End If
End If
Next q
' Below is where the assignment should happen but only returns a blank cell
If z = 0 Then Worksheets("Payroll - Regular").Cells(Total_rows_PR + 1 + p, 1) = Worksheets("DTR").Cells(1 + j, 33)
If z = 0 Then Worksheets("Payroll - Regular").Cells(Total_rows_PR + 1 + p, 2) = Worksheets("DTR").Cells(1 + j, 34)
If z = 0 Then Worksheets("Payroll - Regular").Cells(Total_rows_PR + 1 + p, 3) = Worksheets("DTR").Cells(1 + j, 2)
If z = 0 Then p = p + 1
z = 0
Next j
End Sub
更新:我意識到,即使條件不被一中的第一部分滿足如果 - 然後循環,z的值無緣無故地設置爲1。這就是它不會賦值的原因。不過,我不明白爲什麼它一直分配給1
所以第一個圖像是進行數據編碼(圖像中沒有顯示,因爲它是在最左邊的部分的電子表格,但基本上它輸入了該人的姓名,日期和該人的每日時間記錄(DTR))。當數據被編碼時,它將自動指示它基於年份的助手列AG月份和列AH的月份和年份。在列B的同一張工作表的開頭的某處是該人的姓名。所有這3個將被使用。
該第二圖像是其中摘要計算。如果在特定的月份和年份有特定人員的條目,並且該條目不在該工作表中,則會自動填寫該人員的姓名以及月份和年份。基本上這就是我試圖創建的代碼。
輸出是一個完全自動化的電子表格,只需要在DTR表格中輸入數據。所有的計算都已經有了相應的公式。
在哪一行不分配值?你能告訴我們更多嗎? –
對不起,我試圖正確格式化。我已經編輯它 –
你有一些語法缺失:'如果工作表(「DTR」)。單元格(1 + j,33)=工作表(「工資單 - 常規」)。單元格(2 + q,1)_ 然後如果工作表(「DTR」)。Cells(1 + j,34)= Worksheets(「Payroll - Regular」)。Cells(2 + q,2)_ Then If Worksheets(「DTR」)。Cells(1 + j ,2)=工作表(「工資 - 常規」)。單元格(2 + q,3)_ 然後z = 1',你需要用'End If'來關閉每個'If'' –