আমি কি একই সাথে ভিবিএতে একটি ভেরিয়েবল ঘোষণা করতে এবং নির্ধারণ করতে পারি?


163

আমি ভিবিএতে নতুন এবং আমি জানতে চাইছি যে আমি নিম্নলিখিত ঘোষণা এবং অ্যাসাইনমেন্টটিকে এক লাইনে রূপান্তর করতে পারি:

Dim clientToTest As String
clientToTest = clientsToTest(i)

অথবা

Dim clientString As Variant
clientString = Split(clientToTest)

উত্তর:


237

দুর্ভাগ্যক্রমে ভিবিএতে কোনও সংক্ষিপ্ত বিবরণ নেই, আপনি সবচেয়ে নিকটবর্তী হয়ে যাবেন :ধারাবাহিকতা চরিত্রটি ব্যবহার করে খাঁটি দর্শনীয় জিনিস যদি আপনি এটি পড়ার জন্য এক লাইনে চান;

Dim clientToTest As String:  clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)

ইঙ্গিত (অন্যান্য উত্তর / মন্তব্যগুলির সংক্ষিপ্তসার): অবজেক্টের সাথেও কাজ করে (এক্সেল 2010):

Dim ws  As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"

13
+1, আমার মনে আছে মাইক্রোসফ্ট .NET- র বর্ধনের সময় VB6 বিকাশকারীরা নিজেকে VB.NET এর জন্য প্রস্তুত করার জন্য এটি করা শুরু করে suggest
জন এম গ্যান্ট

এটি ভিবিএ সম্পর্কে আমার বৃহত্তম একক অভিযোগ; আমি বাজি ধরেছি যে জুনিয়র প্রোগ্রামার যদি এই শর্টকাটটি ভিবিএতে যুক্ত করতে কেবল একদিন সময় নেয় তবে যদি ম্যানেজমেন্ট এটিকে যুক্ত করে দেখায়।
পিট অ্যালভিন

21

আপনি নিচের মত, অবজেক্টের সাহায্যে সকার্ট-এ করতে পারেন।

Dim w As New Widget

তবে স্ট্রিং বা ভেরিয়েন্টের সাথে নয়।


এটি সামগ্রিকভাবে সঠিক নয়। আপনি কেবলমাত্র সেমি-কোলো দিয়ে "ক্রিয়া" পৃথক করে কোনও ডেটা-টাইপ (মান বা অবজেক্ট) দিয়ে একই লাইনে একটি ভেরিয়েবল ডিক্লেয়ার এবং আরম্ভ করতে পারেন :। কিছু সীমাবদ্ধতা রয়েছে কারণ আপনার একই লাইনে একাধিক মান ঘোষণাপত্র (যেমন var1 = val1: var2 = val2) নাও থাকতে পারে । এটি স্পষ্টত বিগ আউট হবে এবং আপনাকে কখনও কখনও এই ধরণের অ্যাসাইনমেন্টটি করার অনুমতি দেয় তবে পুরোপুরি হিসাবে এই স্বরলিপি দ্বারা প্রস্তাবিত নয়।
গোল্ডবিশপ

2
@ গোল্ডবিশপ, হ্যাঁ, একক লাইনে একাধিক বক্তব্য একত্রিত করতে কোলন ব্যবহার করা সাধারণত কাজ করে (অ্যালেক্স কে। যেমন বলেছিলেন)। আমি যা বলছি তা স্ট্রিং বা রূপগুলির সাথে কাজ করবে না (বা সম্ভবত অন্যান্য আদিমগুলির সাথে হয়) Dim x As New Tবাক্য গঠন যা কেবলমাত্র বস্তুগুলির সাথে কাজ করে।
জন এম গ্যান্ট

হ্যাঁ একটি কনস্ট্রাক্টর ইনিশিয়ালাইজেশন লাইনে কাজ করবে না তবে এটি ভেরিয়েন্ট এবং স্ট্রিং অ্যাসাইনমেন্টের সাথে কাজ করবে। আমি মান টাইপ এবং কিছু অবজেক্ট টাইপের জন্য সর্বদা এটি ব্যবহার করি। dim str as String: str = "value"এবং dim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1")উভয় বার বার কাজ। যদিও, আমি যদি কোনও অবজেক্ট ইনস্ট্যান্টেশন করি dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1")তবে ভিবিএতে অন্য কোনও অবৈধ ক্রিয়াকলাপের মতো ত্রুটি হবে।
গোল্ডবিশপ

3
কোলন ট্রিকটি ভেরিয়েন্ট এবং স্ট্রিং অ্যাসাইনমেন্ট সহ কাজ করে। Newশব্দ না। আমি এটাই বলছি।
জন এম গ্যান্ট

2
@ জন এমএমগ্র্যান্ট আপনার উত্তরটি স্পষ্ট করে বলতে চাইবে, যেমন আমি এটি পড়েছি, বলেছেন: আপনি কনস্ট্রাক্টর ইনিশিয়ালাইজেশন এবং স্ট্রিং / ভেরিয়েন্ট মান ধরণের সাথে একই লাইন অ্যাসাইনমেন্ট করতে পারবেন না। কিছু কিছু বিভ্রান্ত হতে পারে।
গোল্ডবিশপ

2

আসলে, আপনি পারেন, কিন্তু না।

Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)

'code...

End Sub

সাবটি কল করার সময় আপনি ভেরিয়েবলগুলি আলাদাভাবে সেট করতে পারেন বা তাদের ডিফল্ট মানগুলিতে রেখে দিন।


5
এটি আর্গুমেন্টের জন্য, স্থানীয় ভেরিয়েবলের জন্য নয়।
ivan_pozdeev

1

কিছু ক্ষেত্রে পরিবর্তনশীল ঘোষণার পুরো প্রয়োজনটি Withবিবৃতি ব্যবহার করে এড়ানো যায় ।

উদাহরণ স্বরূপ,

    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    If fd.Show Then
        'use fd.SelectedItems(1)
    End If

এই হিসাবে আবার লিখতে পারেন

    With Application.FileDialog(msoFileDialogSaveAs)
      If .Show Then
        'use .SelectedItems(1)
      End If
    End With

0

নীচে এক লাইনে দেখানো হিসাবে আপনি সংজ্ঞা নির্ধারণ করতে এবং নির্ধারণ করতে পারেন। আমি ঘোষিত এবং একক লাইনে নির্ধারিত দুটি ভেরিয়েবলের উদাহরণ দিয়েছি। যদি একাধিক ভেরিয়েবলের ডাটা টাইপ একই হয়

 Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.