هنگام استفاده از ابزارهای موجود از روبان برای صادرات یک کاربرگ، به عنوان یک فایل CSV، Arkadiusz اشاره کرد که میتواند مشخص کند که میخواهد از یک نقطه ویرگول (;) به عنوان جداکننده فیلد استفاده کند. با این حال، اگر او یک فایل CSV را با استفاده از یک ماکرو (FileFormat:=xlCSV یا xlCSVWindows) ذخیره کند، نمی تواند یک نقطه ویرگول را به عنوان جداکننده تعیین کند.
این روش با طراحی در VBA کار می کند. اجرای اکسل روالهای صادرات برای VBA همیشه از تنظیمات منطقهای ویندوز برای تعیین نحوه جداسازی آیتمها در یک CSV استفاده میکند. به طور خاص، روال به قسمت List Separator برای جداکننده نگاه می کند. این بدان معنی است که در صورت تمایل می توانید با تغییر تنظیمات List Separator در تنظیمات منطقه ای خود، جداکننده را به نقطه ویرگول تغییر دهید.
اگر نمی خواهید تنظیمات منطقه ای را تغییر دهید، در عوض می توانید ماکرو خود را بنویسید که فایل را به هر شکلی که می خواهید خروجی می دهد. برای لحظه ای ماکرو زیر را در نظر بگیرید که خروجی فایل را می دهد:
Sub CreateFile()
Dim sFName As String
Dim Rows As Long
Dim Cols As Long
Dim J As Long
Dim K As Long
Dim sTemp As String
Dim sSep As String
sSep = ";" Specify the separator to be used
sFName = ActiveWorkbook.FullName
If Right(sFName, 5) = ".xlsx" Then
sFName = Mid(sFName, 1, Len(sFName) - 5)
sFName = sFName & ".txt"
Open sFName For Output As 1
With ActiveSheet
Number of rows to export is based on the contents
of column B. If it should be based on a different
column, change the following line to reflect the
column desired.
Rows = .Cells(.Rows.Count, "B").End(xlUp).Row
For J = 1 To Rows
sTemp = ""
Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column
For K = 2 To Cols
sTemp = sTemp & .Cells(J, K).Value
If K < Cols Then sTemp = sTemp & sSep
Next
Print #1, sTemp
Next J
End With
Close 1
sTemp = "There were " & Rows & " rows of data written "
sTemp = sTemp & "to this file:" & vbCrLf & sFName
Else
sTemp = "This macro needs to be run on a workbook "
sTemp = sTemp & "stored in the XLSX format."
End If
MsgBox sTemp
End Sub
این ماکرو یک فایل متنی را باز می کند که همان نام کتاب کار شما را دارد. سپس از هر ردیف عبور می کند و شروع به کنار هم قرار دادن رشته ای از محتویات سلول می کند. (این در متغیر sTemp قرار داده می شود.) هر سلول یک نقطه ویرگول بین خود قرار داده است، همانطور که توسط متغیر sSep تعریف شده است. مقادیر به هم پیوسته هر ردیف در فایل متنی ذخیره می شود و پس از اتمام فایل متنی بسته می شود. این روال بسیار سریع است و پس از اتمام، پیامی نشان می دهد که چند ردیف به فایل صادر شده است.