2013-07-17 1 views
0

Я работаю над решением этого в течение нескольких часов и продолжаю ударять по стене. Я очень близок, но с небольшими подробными ошибками. В настоящее время я использую = weeknum в excel vba для динамического создания строки и получения #NUM! ошибка. Кажется, что работает, когда я ссылаюсь на ячейку, но когда я вводил инструкцию вручную, я получаю ошибки несоответствия типа и меняю другие ошибки. Формат даты, который я использую, является 6/3/2013Калькулятор Excel Fiscal Week

Любая помощь очень признательна и благодарит вас за ваше время!

Sub Macro2() 
    Dim xDate As Double 
    Dim ReturnType As Integer 

    TotalRowCount = ThisWorkbook.Sheets("sap").UsedRange.Rows.count 
    Set entryDateRange = ThisWorkbook.Sheets("sap").Range("G2:G" & TotalRowCount) 
'my attempt at setting the datatype for the row, I dont think this is needed, but was one solution I saw 
    'Range("M2:M" & TotalRowCount).NumberFormat = "@" 
'create a collumn to hold the fiscal week output 
    ThisWorkbook.Sheets("sap").Range("M1") = "FW" 

    For Each test In entryDateRange 
     CurrentRow = test.Row 
     fw_calc = Application.Evaluate("=WEEKNUM(G" & CurrentRow & "," & ReturnType & ")") 
     ' In place of (G" & CurrentRow.. etc I would prefer to use test if possible 
     Worksheets("sap").Cells(CurrentRow, 13) = fw_calc 
    Next test 
End Sub 

ответ

0
fw_calc = Application.WeekNum(test, ReturnType) 

но вы не дали ReturnType значение, так что имеет значение по умолчанию, равное 0, которое не является допустимым значением. Если этот параметр опущен, по умолчанию он равен 1 (воскресенье) дня начала недели.

+0

работал как шарм, спасибо Энди! – Tyler

1

OK Я вижу вашу проблему. Попробуйте использовать следующую строку:

fw_calc = Application.Evaluate("=WEEKNUM(DATE(" & Year(test.value) & "," & Month(test.value) & ", " & Day(test.value) & "))") 

Чтобы объяснить более ясно, функция WEEKNUM() хочет первенствовать серийную дату, поэтому нам нужно создать первый. Функция для этого - DATE(), для которой требуется отдельный год, месяц и день (в указанном порядке). Таким образом, мы используем VBA функции Day(), Month() и Year() разобрать из трех компонентов из вашей даты ячейки (test), а затем передать их в функцию DATE() следующим образом:

"DATE(" & Year(test.value) & ", " & Month(test.value) & ", " & Day(test.value) & ")" 

Это возвращает дату серийник. Затем мы передаем этот серийный номер в качестве аргумента WEEKNUM, чтобы получить номер недели. Выглядит немного неудобно, но вы понимаете.