ฉันสามารถประกาศและกำหนดตัวแปรใน VBA พร้อมกันได้หรือไม่


165

ฉันใหม่กับ VBA และต้องการทราบว่าฉันสามารถแปลงการประกาศและการมอบหมายต่อไปนี้เป็นหนึ่งบรรทัด:

Dim clientToTest As String
clientToTest = clientsToTest(i)

หรือ

Dim clientString As Variant
clientString = Split(clientToTest)

คำตอบ:


239

ไม่มีการจดชวเลขใน VBA แต่น่าเสียดายที่สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือสิ่งที่มองเห็นได้โดยใช้:ตัวอักษรต่อเนื่องหากคุณต้องการในบรรทัดเดียวเพื่อให้อ่านได้

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

คำแนะนำ (สรุปคำตอบ / ความคิดเห็นอื่น ๆ ): ทำงานได้กับวัตถุด้วย (Excel 2010):

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

13
+1 ฉันจำได้ว่า Microsoft แนะนำระหว่าง buildup to .NET ซึ่งนักพัฒนา VB6 เริ่มทำสิ่งนี้เพื่อเตรียมพร้อมสำหรับ VB.NET
John M Gant

นี่คือการร้องเรียนเดียวที่ใหญ่ที่สุดของฉันเกี่ยวกับ VBA; ฉันพนันได้เลยว่าจะต้องใช้โปรแกรมเมอร์รุ่นเยาว์เพียงวันเดียวเพื่อเพิ่มทางลัดนี้ใน VBA หากฝ่ายบริหารสนใจที่จะเพิ่มมัน
Pete Alvin

21

คุณสามารถเรียงลำดับของการทำกับวัตถุดังต่อไปนี้

Dim w As New Widget

แต่ไม่ใช่ด้วยสายอักขระหรือตัวแปร


สิ่งนี้ไม่ถูกต้องทั้งหมด คุณสามารถประกาศและเริ่มต้นตัวแปรในบรรทัดเดียวกันกับข้อมูลใด ๆ ชนิด (ค่าหรือวัตถุ) โดยเพียงแค่แยก "การกระทำ" :กับกึ่ง มีข้อ จำกัด บางประการเนื่องจากคุณไม่สามารถมีการประกาศค่าหลายรายการในบรรทัดเดียวกัน (เช่นvar1 = val1: var2 = val2) มันจะบั๊กออกเป็นช่วง ๆ และอนุญาตให้คุณทำการมอบหมายประเภทนี้บางครั้ง แต่โดยรวมแล้วไม่ได้รับการแนะนำโดยสัญกรณ์นี้
GoldBishop

2
@ GoldBishop ใช่แล้วการใช้เครื่องหมายโคลอนเพื่อรวมหลาย ๆ คำสั่งไว้ในบรรทัดเดียวจะใช้งานได้ตามปกติ (ตามที่ Alex K. พูด) สิ่งที่ฉันพูดจะไม่ทำงานกับสตริงหรือตัวแปร (หรืออาจจะด้วยดั้งเดิมอื่น ๆ ) เป็นDim x As New Tไวยากรณ์ซึ่งทำงานได้เฉพาะกับวัตถุ
John M Gant

ใช่แล้วจะไม่ทำงานบนบรรทัดการเริ่มต้นของตัวสร้าง แต่มันจะทำงานกับการกำหนดชุดข้อมูล Variant และ String ฉันใช้มันตลอดเวลาสำหรับประเภทค่าและบางประเภทของวัตถุ dim str as String: str = "value"และdim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1")ทั้งสองทำงานซ้ำ ๆ แม้ว่าถ้าฉันทำอินสแตนซ์ Object dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1")จะผิดพลาดเหมือนการดำเนินการที่ไม่ถูกต้องอื่น ๆ ใน VBA
GoldBishop

3
เคล็ดลับลำไส้ใหญ่ทำงานร่วมกับตัวแปรและการกำหนดสตริง Newคำหลักไม่ได้ นั่นคือทั้งหมดที่ฉันพูด
John M Gant

2
@JohnMGrant อาจต้องการชี้แจงคำตอบของคุณในขณะที่ฉันอ่านรัฐ: ที่คุณไม่สามารถกำหนดสายเดียวกันกับการเริ่มต้นตัวสร้างและประเภทค่าสตริง / ตัวแปร อาจจะสับสนบ้างเล็กน้อย
GoldBishop

2

ในความเป็นจริงคุณสามารถทำได้ แต่ไม่ใช่แบบนั้น

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

'code...

End Sub

และคุณสามารถตั้งค่าตัวแปรต่าง ๆ เมื่อเรียก 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.