আপনার প্রশ্নটি ভাল কারণ আপনি নিজের সমস্যাটি সমাধান করার চেষ্টা করেছেন এবং আপনি যা চেষ্টা করেছেন তা আমাদের দেখিয়েছেন। আপনার প্রশ্নটি খারাপ কারণ আপনি কী বলছেন তা ভুল নয়। আপনার ম্যাক্রো ত্রুটি ছাড়াই চলে। আমি ধরে নিলাম এটি আপনি যা চান তা করে না তবে আপনি কী চান তা আমাদের জানান না।
আমি একটি কার্যপত্রক তৈরি করেছি যা আপনার ম্যাক্রোর সাথে মেলে:
আমি আপনাকে কোড নিয়েছি এবং কিছু ছোটখাটো পরিবর্তন করেছি:
- আমি
Option Explicit
সমস্ত ভেরিয়েবল যুক্ত করে ঘোষণা করেছিলাম ।
- আমি আমার ওয়ার্কবুকযুক্ত ফোল্ডারের নাম পেতে একটি বিবৃতি যুক্ত করেছি এবং এই ফোল্ডারের নামটি ওপেন স্টেটমেন্টে যুক্ত করেছি। সম্ভবত আপনি পাথের নামটি কার্যপত্রকটিতে অন্তর্ভুক্ত করেছেন এবং এটির দরকার নেই।
।
Option Explicit
Sub CreateFile()
Dim fnum As Long
Dim MyFile As String
Dim PathCrnt As String
PathCrnt = ActiveWorkbook.Path & "\"
Do While Not IsEmpty(ActiveCell.Offset(0, 1))
MyFile = PathCrnt & ActiveCell.Value & ".mhd"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
'use Print when you want the string without quotation marks
Print #fnum, ActiveCell.Offset(0, 5); " " & ActiveCell.Offset(0, 6); " " & _
ActiveCell.Offset(0, 7); " " & ActiveCell.Offset(0, 8); " " & _
ActiveCell.Offset(0, 9); " " & ActiveCell.Offset(0, 10); " " & _
ActiveCell.Offset(0, 11); " " & ActiveCell.Offset(0, 12); " " & _
ActiveCell.Offset(0, 13); " " & ActiveCell.Offset(0, 14); " " & _
ActiveCell.Offset(0, 15); " " & ActiveCell.Offset(0, 16); " " & _
ActiveCell.Offset(0, 17); " " & ActiveCell.Offset(0, 18); " " & _
ActiveCell.Offset(0, 19); " " & ActiveCell.Offset(0, 20); " " & _
ActiveCell.Offset(0, 21); " " & ActiveCell.Offset(0, 22); " " & _
ActiveCell.Offset(0, 23); " " & ActiveCell.Offset(0, 24); " " & _
ActiveCell.Offset(0, 25); " " & ActiveCell.Offset(0, 26)
Close #fnum
ActiveCell.Offset(1, 0).Select
Loop
End Sub
আপনার ম্যাক্রো ত্রুটি ছাড়াই দৌড়েছে এবং প্রতি লাইনে একটি ফাইল তৈরি করেছে। আমি সম্মতি জানাই এটি মার্জিত নয় তবে এটি যদি আপনি চান তবে এটি কাজ করে। আমি ভাবছি যদি আপনি একটি একক ফাইলে সমস্ত লাইন চান। যদি আপনার দরকার হয় তবে ফাইলটি লুপের বাইরে খোলা এবং বন্ধ করতে হবে।
নীচে আমি আপনার কোডটি গুছিয়েছি তবে এটি কী করে তা আমি পরিবর্তন করি নি। আশা করি এটা কাজে লাগবে. আমার কোনও ব্যাখ্যা অস্পষ্ট থাকলে ফিরে আসুন। এটি যদি আপনার সমস্যা সমাধানের জন্য পর্যাপ্ত তথ্য না দেয় তবে আপনার ম্যাক্রোর সমস্যাটি কী তা আপনাকে আরও সম্পূর্ণরূপে ব্যাখ্যা করতে হবে।
Option Explicit
Sub CreateFile2()
Dim ColStart As Long
Dim ColCrnt As Long
Dim FileLine As String
Dim FileName As String
Dim fnum As Long
Dim MyFile As String
Dim PathCrnt As String
Dim RowStart As Long
Dim RowLast As Long
Dim RowCrnt As Long
' Your code starts at the active cell. This relies on the user leaving
' the cursor in the correct cell of the correct worksheet. I have left
' the macro like this but have made it more explicit.
ColStart = ActiveCell.Column
RowStart = ActiveCell.Row
PathCrnt = ActiveWorkbook.Path & "\"
' My code does not move the cursor and operates on the worksheet
' identified in the With statement. I have used the active worksheet
' but I could have written 'With Worksheets("Sheet2")' or
' made the worksheet name a variable.
With ActiveSheet
' Cells(R,C) identifies a cell within the active worksheet by its row
' and column number.
' .Cells(R,C) identifies a cell within the worksheet named in the With
' statement by its row and column number.
' Rows.Count gives the maximum row number in your version of Excel.
' This statement starts at the bottom of column ColStart, moves up until
' it reaches a cell with a value and returns its row number.
' With this I could write:
' For RowCrnt = RowStart to RowLast
' -----
' Next
' I have kept your style. But I suggest you experiment with Ctrl+Up,
' which is the keyboard equivalent of this VBA and look up "End" in
' VBA help.
RowLast = .Cells(Rows.Count, ColStart).End(xlUp).Row
RowCrnt = RowStart
Do While Not IsEmpty(.Cells(RowCrnt, ColStart).Value)
' This is not necessary; I can use .Cells(RowCrnt, ColStart).Value
' in the file open statment. But this makes it clearer what I am
' doing. When you need to update this macro in six or twelve
' months you will immediately see what the macro is doing.
FileName = .Cells(RowCrnt, ColStart).Value
' Why the extension "MHD"? It is easier to stick to standard
' extensions.
MyFile = PathCrnt & FileName & ".mhd"
'set and open file for output
fnum = FreeFile()
Open MyFile For Output As fnum
' There are lots of different ways of concatenating the cells in
' a row. I will not claim this is the best but I think it is easy
' to understand. Having it in a loop means it is easy to change
' the number of columns written to the file.
FileLine = .Cells(RowCrnt, 6).Value
For ColCrnt = 7 To 27
FileLine = FileLine & " " & .Cells(RowCrnt, ColCrnt).Value
Next
Print #fnum, FileLine
Close #fnum
RowCrnt = RowCrnt + 1
Loop
End With
End Sub