เดือนและวันที่จะถูกสลับไปเรื่อย ๆ เมื่อรัน VBA


0

ฉันมีคอลัมน์บนแผ่นงานคอลัมน์ F ซึ่งเต็มไปด้วยวันที่ ตอนนี้ฉันต้องการวันที่เหล่านี้ในรูปแบบ "dd, mm, yyyy" แต่บางครั้งพวกเขาอยู่ในรูปแบบข้อความรูปแบบเรา / อาร์เมเนียในข้อมูลต้นฉบับ เหตุใดฉันจึงใช้แมโครเพื่อแปลงในรูปแบบที่ถูกต้องมันจะเปลี่ยนวันที่และเดือนเป็นบางครั้ง แต่ถ้าฉันทำด้วยตนเองจะไม่มีข้อผิดพลาดเกิดขึ้น

กำลังใช้ค่าการวางเพื่อรับข้อมูลในแผ่นงานของฉันและนี่คือรหัสของฉัน มันแสดงเดือนที่ถูกต้องสำหรับรูปแบบ dd / mmm / yyyy แต่สลับเดือนและวันที่

Range("F2").Select
    Range(Selection, Selection.End(xlDown)).Select
 Selection.NumberFormat = "dd/mmm/yyyy"
    Selection.TextToColumns Destination:=Range("F2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
 Selection.NumberFormat = "dd/mm/yyyy"

ใช้เซลล์ F2 วันที่ 9 มกราคม 2552 ในรูปแบบ 09/01/2552

เมื่อฉันทำข้อความกับคอลัมน์มันจะทำให้วันที่เป็นวันที่ 09/01/2009

เมื่อฉันทำซ้ำข้อความไปยังคอลัมน์ (ไม่มีการเปลี่ยนแปลงใด ๆ ) มันจะเปลี่ยนวันที่ (ไม่ใช่รูปแบบ) เป็นวันที่ 1 กันยายน 2009

ไม่มีใครรู้ว่าทำไมสิ่งนี้เกิดขึ้น? หากฉันทำข้อความเป็นคอลัมน์ด้วยตนเองฉันสามารถทำซ้ำได้ตลอดทั้งวันโดยอยู่ในรูปแบบที่ฉันชอบ

ปัญหาเกิดขึ้นเมื่อฉันทำซ้ำแมโครเท่านั้นไม่แน่ใจว่าฉันทำอะไรผิด ลองเปลี่ยน fieldinfo เป็น array (array (1,4)) ไปเป็นประโยชน์

หวังว่าใครบางคนสามารถช่วยได้


คุณคิดว่าOther:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=Trueกำลังทำอะไร
เดฟ

นอกจากนี้ฉันมีปัญหานี้ในมาโคร ถ้าฉันพยายามเขียนแมโครด้วย dd-mm-yyyy ดังนั้นทุกครั้งที่ฉันเรียกใช้แมโครมันจะสลับไปมา การเปลี่ยนเป็น dd / mm / yyyy แก้ไขได้แล้ว ( ตัวอย่างรหัสแสดง )
เดฟ

คำตอบ:


0

คุณต้องตั้งค่าประเภทข้อมูลในอาร์กิวเมนต์ FieldInfo ของคุณ

Redim FieldInfoVal(1 To 1) 
FieldInfoVal(1) = xlDMYFormat

ไม่มี 4 คอลัมน์ดังนั้นฉันจึงใช้อาร์เรย์ 1

จากนั้นส่งผ่านใน FieldInfoVal หลังจาก FieldInfo: =

คุณอาจสามารถแจกจ่ายกับตัวแปรโดยใช้

FieldInfo:=Array(0, xlDMYFormat)

ฉันคิดว่าอาเรย์นั้นขึ้นอยู่กับ 1 ดังนั้นมันจะไม่สนใจสมาชิกลำดับที่ 0 ฉันเพิ่งใส่เข้าไปในศูนย์

ฉันคิดว่าวิธีการทั้งสองควรใช้ได้ผล


0

ฉันรวบรวมรหัสชิ้นนี้และทำงานให้ฉัน

Sub FormatDate()

Application.ScreenUpdating = False
With Range("A2", Range("A" & Rows.Count).End(xlUp))
.EntireColumn.Insert
.NumberFormat = "@"
With .Offset(, -1)
.FormulaR1C1 = "=Text(RC[1],""dd/mm/yy"")"
.Offset(, 1).Value = .Value
.EntireColumn.Delete
End With
End With
Application.ScreenUpdating = True

Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 4)

End Sub  
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.