0

私の組織がスタッフのために毎週病気情報を提出する必要があるスプレッドシートを持っています。スプレッドシートには、その年の各週に1つのタブがあり、ある週から次の週に従業員の詳細をコピーするためのマクロがすでにあります。

以下のコードを組み込んで、まだ病気休暇中のスタッフをピックアップし、病気期間の開始日を翌週にコピーしようとしています。このコードは、ループ内の文字列として従業員番号を取得し、開始日のオブジェクトを作成することで機能します。

テンプレートのレイアウトやその他の情報のために、ある週から次の週にシート全体を単純にコピーして貼り付けることはできません。

改訂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
4

1 に答える 1

1

どのように宣言または設定されているCurrentWeekかを示していません。これらは、他の場所で設定されたグローバル変数 (ちなみに、これは this に渡されるパラメーターである必要があります) であるNextWeekと仮定します。worksheetsub


次に、すべての cell参照をいずれかで修飾します。

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

この行が問題の原因です (削除してください)
なぜですか? 2回目以降は不合格者等を通すのでEmployeeNumber = Cells(I, 3)シート参照NextWeek

NextWeek.Select

FindRange変数を使用して従業員番号を取得する

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
于 2013-01-09T12:51:46.117 に答える