2016-11-01 5 views
0

У меня возникли проблемы с отправкой даты с одного листа на другой. При использовании приведенной ниже формулы, если дата может соответствовать как американскому, так и австралийскому формату, она решает преобразовать ее в американскую (мм/дд/гггг, когда мне это нужно как дд/мм/гггг).Проблема формата DateValue между рабочими листами

Как исходная ячейка, так и целевая ячейка одинаково отформатированы, а сам формат ячейки не изменяется через vba, он просто перебирает то, что является днем ​​и что такое месяц.

Sub BOCMS() 

Dim date1 As String 
Dim date2 As String 
date1 = Format(DateValue(Sheet1.Range("L13").Value), "dd/mm/yyyy") 
date2 = Format(DateValue(Sheet1.Range("L14").Value), "dd/mm/yyyy") 

Workbooks.Open (ThisWorkbook.Path & "\Manual date res acts\BOC - Res Activity Report.xlsm") 
Workbooks("BOC - Res Activity Report.xlsm").Activate 

Workbooks("BOC - Res Activity Report.xlsm").Worksheets("Res Activity Report").Range("O1").Select 
Selection.ClearContents 
Selection.Value = Format(date1, "dd/mm/yyyy") 
Workbooks("BOC - Res Activity Report.xlsm").Worksheets("Res Activity Report").Range("Q1").Select 
Selection.ClearContents 
Selection.Value = Format(date2, "dd/mm/yyyy") 


ActiveWorkbook.RefreshAll 
Application.Run "'BOC - Res Activity Report.xlsm'!RunReport" 
End Sub 

Любые советы будут фантастическими

+1

Хорошая причина не использовать строки, которые только _look_ как даты. Сделка с базовой датой Серийные номера. –

+0

Извините, я не понимаю, что вы говорите. Я пробовал это как Date вместо String и получал тот же результат. У вас есть предложения по устранению проблемы? –

ответ

0

У меня нет двух устанавливается с различными местными жителями, чтобы проверить на, так что это не проверялось, но должно быть близко

Sub BOCMS() 
    Dim date1 As Double 
    Dim date2 As Double 
    Dim wb1 As Workbook, wb2 As Workbook 

    date1 = Sheet1.Range("L13").Value 
    date2 = Sheet1.Range("L14").Value 

    Set wb1 = Workbooks.Open(ThisWorkbook.Path & "\Manual date res acts\BOC - Res Activity Report.xlsm") 
    Set wb2 = Workbooks("BOC - Res Activity Report.xlsm") 

    With wb2.Worksheets("Res Activity Report").Range("O1") 
     .ClearContents 
     .Value = date1 
     .NumberFormat = "dd/mm/yyyy" 
    End With 

    With wb2.Worksheets("Res Activity Report").Range("Q1") 
     .ClearContents 
     .Value = date2 
     .NumberFormat = "dd/mm/yyyy" 
    End With 


    ActiveWorkbook.RefreshAll 
    Application.Run "'BOC - Res Activity Report.xlsm'!RunReport" 
End Sub 
+0

Большое вам спасибо, это прекрасно. Никогда не использовали Double, поэтому вам придется заглядывать в i t для будущих целей. Еще раз спасибо. –

+0

В целях исследования загляните в «Серийный номер DateTime». [Место для запуска] (https://msdn.microsoft.com/en-us/library/office/gg264202.aspx) –

Смежные вопросы