اوله در وارد کردن اطلاعات به یک کتاب کار اکسل با مشکل مواجه شد. به نظر می رسد فایل هایی که او باید وارد کند فایل های متنی هستند که معمولاً هزاران و هزاران رکورد در آنها وجود دارد. با این حال، Ole به بیشتر ردیفهای ورودی نیاز ندارد و معمولاً پس از وارد شدن رکوردها به اکسل، از شر آنها خلاص میشود. اوله به دنبال راهی برای خلاص شدن از شر رکوردهای ناخواسته در طول فرآیند واردات است تا زمانی که داده ها در کتاب کار او هستند، کار کمتری برای انجام دادن داشته باشد.
راه حل های مختلفی برای حل این مشکل وجود دارد. یک راه حل این است که از Access به عنوان اولین مرحله وارد کردن استفاده کنید. اکسس به راحتی هزاران رکوردی را که میخواهید وارد کنید کنترل میکند - حتی اگر رکوردهای بیشتری از آنچه میتوانید وارد اکسل کنید وجود داشته باشد. می توانید فایل را به Access وارد کنید، رکوردهای ناخواسته را فیلتر کنید و سپس جدول به دست آمده را به عنوان یک کتاب کار اکسل صادر کنید.
با این حال، بهترین راه حل ممکن است دور زدن فیلترهای واردات اکسل باشد. اگر دادههای وارد کردن شما، مانند Oles، در یک فایل متنی باشد، عالی عمل میکند. شما به راحتی می توانید یک روتین واردات را در VBA بنویسید و به آن اجازه دهید فایل واردات را پردازش کند. به عنوان مثال، ماکرو زیر را در نظر بگیرید:
Sub Import()
Dim sFile As String
Dim sUnwanted As String
Dim sDelim As String
Dim iRow As Integer
Dim iCol As Integer
Dim bBadRecord As Boolean
Dim iTemp As Integer
sFile = "d:data.txt"
sUnwanted = "bad text"
sDelim = ","
Open sFile For Input As #1
iRow = 1
While Not EOF(1) Scan file line by line
iCol = 1
Line Input #1, sBuffer
Check to see if should ignore record
bBadRecord = Instr(sBuffer, sUnwanted)
If Not bBadRecord Then
iTemp = Instr(sBuffer, sDelim)
While iTemp > 0
With Application.Cells(iRow, iCol)
.NumberFormat = "@" Text formatting
.Value = Left(sBuffer, iTemp-1)
End With
iCol = iCol + 1
sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer))
iTemp = Instr(sBuffer, sDelim)
Wend
If Len(sBuffer) > 0 Then
With Application.Cells(iRow, iCol)
.NumberFormat = "@" Text formatting
.Value = sBuffer
End With
End If
iRow = iRow + 1
End If
Wend
Close #1
End Sub
این ماکرو یک فایل داده را باز می کند و هر رکورد را در فایل می خواند. رکورد را بررسی می کند تا مطمئن شود که برای وارد کردن صحیح است، و سپس رکورد را بر اساس یک جداکننده جدا می کند و اطلاعات را در کاربرگ فعلی قرار می دهد. شما می توانید نام فایل داده (متغیر sFile)، متنی که نشان دهنده رکورد بد (متغیر sUnwanted) و جداکننده (متغیر sDelim) است را تغییر دهید.
به عنوان مثال، فرض کنید که شما یک فایل داده به نام Customers.txt دارید. این فایل حاوی تمام سوابق مشتریان شما است، اما نمیخواهید سوابق را برای مشتریانی که آدرسهایی در داخل ایالات متحده دارند وارد کنید. علاوه بر این، رکوردهای موجود در فایل داده از یک کاراکتر برگه بین هر فیلد استفاده می کنند. در این حالت فقط باید تغییرات زیر را در متغیرهای ابتدای ماکرو اعمال کنید:
sFile = "d:Customers.txt"
sUnwanted = "United States"
sDelim = Chr(9)
هنگامی که ماکرو را اجرا می کنید، کاربرگ فعلی فقط حاوی داده های مورد نظر است.