2013-01-09 94 views
0

我有一個電子表格,我們的組織需要每週爲工作人員提交疾病信息。該電子表格每年的每個星期都有一個選項卡,我已經有一個宏將一週的員工細節複製到下一個。Excel VBA試圖將單元格值設置爲另一個單元格的日期

我正試圖在下面的代碼中建立工作人員,他們仍在請病假,並將病假期的開始日期複製到下一週。該代碼通過在循環中以字符串形式提取員工編號,然後爲開始日期創建一個對象。

由於模板上的佈局和其他信息,我無法簡單地將整個工作表從一週複製並粘貼到下一個工作日。

低於現在的副本修訂 修改後的代碼第一SicknessStart日期NextWeek。但是,它只能在第一個日期工作,並且不會因某些原因而複製後續行中的信息。日期格式也以美國格式複製,但我正在研究。

Sub CopyDate 

Dim I As Integer, CopyDate As Boolean 
I = 6 
CopyDate = False 

'Use the Employee Number column (C) to perform the check on the sickness dates 
Do While CurrentWeek.Cells(I, 3) <> "" 

'Check if there is a sickness start date in column R 
If CurrentWeek.Cells(I, 18) <> "" Then 
'Check if they have entered 'Still Away' or left the cell blank in column S 
    If CurrentWeek.Cells(I, 19) = "Still Away" Or CurrentWeek.Cells(I, 19) = "" Then 

     Dim EmployeeNumber As String 
     Dim SicknessStart As String 
      EmployeeNumber = Cells(I, 3) 
      SicknessStart = Cells(I, 18) 

     NextWeek.Select 

'Find the employee number string on the following week's tab and enter sickness start date 
     Columns(3).Find(What:=EmployeeNumber, LookIn:=xlValues, LookAt:= _ 
     xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
     , SearchFormat:=False).Offset(0, 15) = SicknessStart 

End If 
End If 

I = I + 1 
Loop 
CopySickness = True 
End Sub 
+0

你試圖僅僅複製值和格式化單元之後,還是根本不? – Vogel612

+0

得到更好的幫助: 1)你不會告訴我們什麼是錯的 2)沒有這樣的事情作爲「日期對象」 –

+0

@ Vogel612我試圖複製單元格並粘貼它,但沒有' t似乎目前正在工作,但仍會繼續嘗試使用該方法。 @iDevlop在'CurrentWeek'上如果我的日期爲01/01/13作爲'StartDate',它不會將這個日期跨越到'NextWeek'上,而是默認爲01/00/1900。我沒有正確地標題,我的意思是日期設置爲'StartDate as Date'而不是String或任何其他變量。 – Asim

回答

1

你沒有表現如何CurrentWeekNextWeek聲明或設置。我假設它們是全局的worksheet變量(順便說一句糟糕的主意,它們應該是傳遞到sub的參數),這些變量是在別處設置的。


然後晉級與一個或其他所有cell引用。

 EmployeeNumber = CurrentWeek.Cells(I, 3) 
     SicknessStart = CurrentWeek.Cells(I, 18) 

這條線路是你的問題(刪除)事業
爲什麼?因爲通過不合格EmployeeNumber = Cells(I, 3)等所述第二時間是指片NextWeek

NextWeek.Select 

Find制將本僱員數量Range可變

Dim rStartDate as Range 

' replace your Columns(3).Find(... code with this 
Set rStartDate = NextWeek.Columns(3).Find(_ 
    What:=EmployeeNumber, _ 
    LookIn:=xlValues, _ 
    LookAt:=xlWhole, _ 
    SearchOrder:=xlByRows, _ 
    SearchDirection:=xlNext, _ 
    MatchCase:=False, _ 
    SearchFormat:=False) 
If Not rStartDate Is Nothing Then 
    rStartDate.Offset(0, 15) = SicknessStart 
Else 
    ' EmployeeNumber is not found in NextWeek.Column(3) 
End If 
+0

對不起'CurrentWeek'和'NextWeek'是在這個'sub'前面聲明的,但是我沒有包含所有的代碼,因爲它與這個問題並不完全相關。我會嘗試使用'range'變量來查看是否有效。 – Asim

+0

糾正我,如果我錯了,但他不能使用一個範圍,因爲他需要通過條目選擇他們,好看會像「SUMIF()」一樣,「COPYIF()」,但我想那也是本地化在Excel中,即使我經常錯過它...... – Vogel612

+0

查看更新的澄清 –

相關問題