আমি নিম্নলিখিত কোড সঙ্গে কিছু সমস্যা হচ্ছে। যখনই আমি VBA কোড চালাই, তখন CleanFileName এবং CleanUsedRange কোড আমার ভলিউম সূত্র মোছা হয়।
এটি দৃশ্যমান সূত্রগুলি মুছে ফেলার ব্যতীত পরিচ্ছন্ন ফাইল নাম এবং ক্লিয়ার ব্যবহৃত রেঞ্জ ব্যবহার করার উপায় আছে। কোড নিচে
Private Sub CommandButton1_Click()
Const FULL_PATH = "C:\Documents\test\quot.txt"
Dim fId As String, txt As String, txtLen As Long, d As Object, dc As Long
fId = FreeFile
Open FULL_PATH For Input As fId
txt = Input(LOF(fId), fId) 'Read entire file (not line-by-line)
Close fId
txtLen = Len(txt)
Set d = CreateObject("Scripting.Dictionary")
d("Name") = "C11" 'Same as: d.Add Key:="Name", Item:="C11"
d("Phone") = "H13"
d("Address1") = "C15"
d("Email") = "C13"
d("Postcode") = "H16"
d("SR") = "C10"
d("MTM") = "H14"
d("Serial") = "H15"
d("Problem") = "C17"
d("Action") = "C18"
d("Dated") = "H10"
dc = d.Count
Dim i As Long, k As String, sz As Long, found As Long
With ThisWorkbook.Worksheets("Sheet1") '<--- Update sheet name
For i = 0 To dc - 1 'd.Keys()(i) is a 0-based array
k = d.Keys()(i) 'Name, Phone, etc
found = InStr(txt, k) + Len(k) + 1 'Find the (first) key in file
If found > 0 Then 'Determine item length by finding the next key
If i < dc - 1 Then sz = InStr(txt, d.Keys()(i + 1)) Else sz = txtLen + 2
.Range(d(k)).Value2 = Trim$(Mid$(txt, found, sz - found - 1))
End If
Next
End With
End Sub
CleanFile
Public Function CleanFileName(ByVal fName As String) As String
Dim b() As Byte, specialChars As Variant, i As Long
b = "\/:*?|<>" & Chr(34) & Chr(8) & Chr(9) & Chr(10) & Chr(13)
specialChars = Split(StrConv(b, vbUnicode), Chr(0))
fName = Trim$(fName) 'Trim, then remove \ / : * ? | < > " Backspace Tab LF CR
For i = 0 To UBound(specialChars)
fName = Replace(fName, specialChars(i), vbNullString)
Next
CleanFileName = fName
End Function
দ্বিতীয় কোড
Public Sub CleanUsedRange(ByRef ur As Range)
Dim arr As Variant, r As Long, c As Long
arr = ur.Formula
For r = 1 To UBound(arr, 1)
For c = 1 To UBound(arr, 2)
arr(r, c) = CleanFileName(arr(r, c))
Next
Next
ur.Formula = arr
End Sub
রপ্তানি কোড
Private Sub CommandButton2_Click()
Dim ws As Worksheet, fPath As String, fName As String, dt As String
Set ws = ThisWorkbook.Worksheets("Sheet1")
fPath = "C:\Documents\test\"
dt = Format(Date, " - MM-DD-YYYY")
CleanUsedRange ws.UsedRange
fName = fPath & ws.Range("C10") & dt & " - Quotation"
ws.Range("A1:I60").ExportAsFixedFormat Type:=xlTypePDF, FileName:=fName
End Sub
দৃষ্টিকোণ সূত্রগুলি অন্য শীট থেকে তথ্য আমদানি করতে ব্যবহার করা হয়, যাতে একটিকে একে অপরকে টাইপ করার প্রয়োজন হয় না। দৃষ্টিভঙ্গি মুছে ফেলার জন্য ক্লিনফিলটি চালু করার উপায় নেই।
আপনি প্রস্তাবিত কোড সম্পাদনা করার পরে
Private Sub CommandButton2_Click()
Dim ws As Worksheet, fPath As String, fName As String, dt As String
Set ws = ThisWorkbook.Worksheets("Sheet1")
fPath = "C:\Users\Documents\test\\"
dt = Format(Date, " - MM-DD-YYYY")
Range("C10") = CleanFileName(Range("C10"))
fName = fPath & ws.Range("C10") & dt & " - Quotation"
ws.Range("A1:I60").ExportAsFixedFormat Type:=xlTypePDF, FileName:=fName
End Sub
যাইহোক, এক্সপোর্ট হওয়া ফাইলটি বিদেশী প্রতীক আছে বলে মনে হচ্ছে
অন্য কোন সমাধান?
আপনার প্রস্তাবিত কোডটি আমি পরিবর্তিত করেছি কিন্তু আমি ভিবিএ চালাতে অক্ষম। এই যোগ করার পরে:
.Range(d(k)).Value2 = Trim$(Mid$(txt, found, sz - found - 2))
ত্রুটি নির্দেশ করা হয় যেখানে এই
Open FULL_PATH For Input As fId
ছবি দেখো নতুন ত্রুটি
এছাড়াও আপনি অনুরোধ হেক্স কোড খুঁজুন
আমি কোড পরিবর্তন করেছি
Else sz = txtLen + 3
যাইহোক, আমি এখনো সংযুক্ত হচ্ছে 76 সংযুক্ত ত্রুটি 76 এবং ডিবাগ এই লাইন নির্দেশ করা হয়;
Open FULL_PATH For Input As fId