কীভাবে নির্বাচন এড়ানো যায় তার কয়েকটি উদাহরণ
Dim'ভেরিয়েবল ব্যবহার করুন
Dim rng as Range
Setপ্রয়োজনীয় ব্যাপ্তির পরিবর্তনশীল। একক কক্ষ পরিসীমা উল্লেখ করার বিভিন্ন উপায় রয়েছে
Set rng = Range("A1")
Set rng = Cells(1,1)
Set rng = Range("NamedRange")
বা একটি বহু-কক্ষ পরিসীমা
Set rng = Range("A1:B10")
Set rng = Range("A1", "B10")
Set rng = Range(Cells(1,1), Cells(10,2))
Set rng = Range("AnotherNamedRange")
Set rng = Range("A1").Resize(10,2)
আপনি পদ্ধতির শর্টকাটটি ব্যবহার করতে পারেন Evaluateতবে এটি কম দক্ষ এবং সাধারণত উত্পাদন কোড এড়ানো উচিত।
Set rng = [A1]
Set rng = [A1:B10]
উপরোক্ত সমস্ত উদাহরণ সক্রিয় শীটে সেলগুলি উল্লেখ করে । আপনি যদি সক্রিয়ভাবে কেবল সক্রিয় শীট দিয়ে কাজ করতে না চান তবে একটি Worksheetভেরিয়েবলটিও ডিমে করা ভাল
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Set rng = ws.Cells(1,1)
With ws
Set rng = .Range(.Cells(1,1), .Cells(2,10))
End With
আপনি যদি এর সাথে কাজ করতে চান তবে ActiveSheetস্পষ্টতার জন্য স্পষ্ট হওয়া ভাল। তবে সাবধানতা অবলম্বন করুন, কারণ কিছু Worksheetপদ্ধতি সক্রিয় পত্রকে পরিবর্তন করে।
Set rng = ActiveSheet.Range("A1")
আবার এটি সক্রিয় ওয়ার্কবুককে বোঝায় । আপনি যদি বিশেষভাবে কেবল ActiveWorkbookবা এর সাথে কাজ করতে না চান তবে ThisWorkbookএকটি Workbookভেরিয়েবলটিও ডিমে করা ভাল ।
Dim wb As Workbook
Set wb = Application.Workbooks("Book1")
Set rng = wb.Worksheets("Sheet1").Range("A1")
আপনি যদি এর সাথে কাজ করতে চান তবে ActiveWorkbookস্পষ্টতার জন্য স্পষ্ট হওয়া ভাল। তবে যত্ন নিন, WorkBookযতগুলি পদ্ধতি সক্রিয় বইকে পরিবর্তন করে।
Set rng = ActiveWorkbook.Worksheets("Sheet1").Range("A1")
আপনি ThisWorkbookচলমান কোডযুক্ত বইটি উল্লেখ করতে অবজেক্টটি ব্যবহার করতে পারেন ।
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1")
কোডের একটি সাধারণ (খারাপ) টুকরোটি হল একটি বই খোলার, কিছু তথ্য পাওয়ার পরে আবার বন্ধ করা
এইটা খারাপ:
Sub foo()
Dim v as Variant
Workbooks("Book1.xlsx").Sheets(1).Range("A1").Clear
Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = ActiveWorkbook.Sheets(1).Range("A1").Value
Workbooks("SomeAlreadyOpenBook.xlsx").Activate
ActiveWorkbook.Sheets("SomeSheet").Range("A1").Value = v
Workbooks(2).Activate
ActiveWorkbook.Close()
End Sub
এবং আরও ভাল হবে:
Sub foo()
Dim v as Variant
Dim wb1 as Workbook
Dim wb2 as Workbook
Set wb1 = Workbooks("SomeAlreadyOpenBook.xlsx")
Set wb2 = Workbooks.Open("C:\Path\To\SomeClosedBook.xlsx")
v = wb2.Sheets("SomeSheet").Range("A1").Value
wb1.Sheets("SomeOtherSheet").Range("A1").Value = v
wb2.Close()
End Sub
রেঞ্জ ভেরিয়েবল হিসাবে আপনার Subগুলি এবং Functionএর সীমাগুলি পাস করুন
Sub ClearRange(r as Range)
r.ClearContents
'....
End Sub
Sub MyMacro()
Dim rng as Range
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:B10")
ClearRange rng
End Sub
আপনার ভেরিয়েবলগুলিতেও পদ্ধতিগুলি (যেমন Findএবং Copy) প্রয়োগ করা উচিত
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10")
Set rng2 = ThisWorkbook.Worksheets("SomeSheet").Range("B1:B10")
rng1.Copy rng2
আপনি যদি অনেকগুলি কক্ষের উপর লুপ করে চলেছেন তবে প্রথমে পরিসর মানগুলিকে প্রথমে কোনও বৈকল্পের অ্যারেতে অনুলিপি করা এবং তার থেকে লুপ করা ভাল often
Dim dat As Variant
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.Worksheets("SomeSheet").Range("A1:A10000")
dat = rng.Value ' dat is now array (1 to 10000, 1 to 1)
for i = LBound(dat, 1) to UBound(dat, 1)
dat(i,1) = dat(i,1) * 10 'or whatever operation you need to perform
next
rng.Value = dat ' put new values back on sheet
এটি যা সম্ভব তার জন্য এটি একটি ছোট টেস্টার।
Selectএবং / অথবাActiveSheetইত্যাদি সম্পূর্ণরূপে অনিবার্য is এখানে আমি পেয়েছি এমন একটি উদাহরণ এখানে দেওয়া হয়েছে: stackoverflow.com/questions/22796286/…