두 통합 문서가 있습니다잘못된 주 번호를 반환하는 VBA Weeknum 함수?
통합 문서 1 = L.O. 라인 배달 추적기
Column G Column M
05/01/2017 (Other Criteria)
09/01/2017 (Other Criteria)
01/01/2017 (Other Criteria)
이 통합 문서 2 = 보고서 :
시트 2
B6 = (Other Criteria)
B9 = 2 D9 = 2017
시트 3
Column A Col B Col C etc.
내 배송 추적 통합 문서에 열 B의 날짜가 일치하면 D9 (보고서 통합 문서)에서 B9와 연도의 주 번호를 입력 한 다음 내 날짜 (및 기타 해당하는 값)을 보고서 통합 문서, 열 a, b, c 등으로 바꿉니다.
관련하여 월요일은 월요일부터 시작해야하므로 B9 셀에 '2'를 입력하면 월요일부터 9 일 - 1 월 15 일
내 VBA 주 num 함수가 나를 (를) 가져 오는 중입니다. 05/01/2017. 이것은 잘못된 것입니다! 2011 년 9 월 1 일에만 가져 오는 것이 좋습니다.
내 원하는 결과 :
보고서 통합 문서 : 시트 3
Column A
09/01/2017
이 VBA를 내 WEEKNUM 함수를 함께 할 수있는 뭔가가하지만 난 내가 잘못 뭘하는지 모르겠어요. 누군가 내가 이걸 어떻게하면 좋을지 보여줄 수 있습니까? Heres는
내 코드 :
Option Explicit
Sub code2()
MsgBox "This will take upto 2 minutes."
Application.ScreenUpdating = False
Dim WB As Workbook
Dim i As Long
Dim j As Long
Dim Lastrow As Long
'On Error Resume Next
'Clear Data Sheet
'On Error GoTo Message
With ThisWorkbook.Worksheets("Data")
.Rows(2 & ":" & .Rows.Count).ClearContents
End With
Set WB = Workbooks("L.O. Lines Delivery Tracker.xlsm")
'On Error GoTo 0
If WB Is Nothing Then 'open workbook if not open
Set WB = Workbooks.Open("C:\Users\Mark O'Brien\Desktop\L.O. Lines Delivery Tracker.xlsm")
End If
' ======= Edit #2 , also for DEBUG ======
With WB.Worksheets(1)
Lastrow = .Cells(.Rows.Count, "G").End(xlUp).Row
j = 2
For i = 7 To Lastrow
' === For DEBUG ONLY ===
Debug.Print CInt(ThisWorkbook.Worksheets(2).Range("B9").value)
Debug.Print WeekNum(.Range("G" & i).value)
Debug.Print CInt(ThisWorkbook.Worksheets(2).Range("D9").value)
Debug.Print Year(.Range("G" & i).value)
Debug.Print ThisWorkbook.Worksheets(2).Range("B6").value
Debug.Print .Range("M" & i).value
If CInt(ThisWorkbook.Worksheets(2).Range("B9").value) = WeekNum(.Range("G" & i).value) Then ' check if Month equals the value in "A1"
If CInt(ThisWorkbook.Worksheets(2).Range("D9").value) = Year(.Range("G" & i).value) Then ' check if Year equals the value in "A2"
If ThisWorkbook.Worksheets(2).Range("B6").value = .Range("M" & i).value Then
ThisWorkbook.Worksheets(3).Range("A" & j).value = .Range("G" & i).value
ThisWorkbook.Worksheets(3).Range("B" & j).Formula = "=WeekNum(A" & j & ",21)"
ThisWorkbook.Worksheets(3).Range("C" & j).value = .Range("L" & i).value
ThisWorkbook.Worksheets(3).Range("D" & j).value = .Range("D" & i).value
ThisWorkbook.Worksheets(3).Range("E" & j).value = .Range("E" & i).value
ThisWorkbook.Worksheets(3).Range("F" & j).value = .Range("F" & i).value
ThisWorkbook.Worksheets(3).Range("g" & j).value = .Range("p" & i).value
ThisWorkbook.Worksheets(3).Range("H" & j).value = .Range("H" & i).value
ThisWorkbook.Worksheets(3).Range("I" & j).value = .Range("I" & i).value
ThisWorkbook.Worksheets(3).Range("J" & j).value = .Range("J" & i).value
ThisWorkbook.Worksheets(3).Range("k" & j).value = .Range("Q" & i).value
ThisWorkbook.Worksheets(3).Range("L" & j).value = .Range("m" & i).value
j = j + 1
End If
End If
End If
Next i
End With
'ThisWorkbook.Worksheets("Data").UsedRange.Columns("B:B").Calculate
'ThisWorkbook.Worksheets(2).UsedRange.Columns("B:AA").Calculate
'On Error GoTo Message
'With ThisWorkbook.Worksheets(2) '<--| change "mysheet" to your actual sheet name
'Intersect(.Range(Rows(14), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("G:G")).WrapText = True
'Intersect(.Range(Rows(14), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("G:G")).EntireRow.AutoFit
'End With
'End
Application.ScreenUpdating = True
Exit Sub
Message:
On Error Resume Next
Exit Sub
End Sub
Function WeekNum(D As Date) As Integer
WeekNum = CInt(Format(D, "ww", 2))
End Function
실제 문제를 설명하는 몇 줄까지 코드를 모두 끓여야 만 - 실제로 WeekNum 함수를 호출하는 데 몇 줄이 필요하고 나머지는 관련이 없습니다. –
@TimWilliams 사과 단지 컨텍스트를 구축하려고했습니다. 그것은 바닥에있는 코드의 마지막 비트 일뿐입니다. 제가 생각하기에 문제가되는 주간 함수입니다. – user7415328
WeekNum 함수 출력이 워크 시트 WEEKNUM 함수와 정확하게 일치하고 BTW에서 UDF에 대해 동일한 이름을 사용해서는 안됩니다 ... 내장 함수에 의해 함수가 오버 라이딩 된 것 같습니다. 난 그냥 내장 된 WEEKNUM 함수를 사용하고 (첫날로 간주되는 요일을 결정하는 두 번째 매개 변수를 제공한다.) –