ความแตกต่างระหว่าง Visual Basic 6.0 และ VBA


208

ความแตกต่างระหว่างสองคืออะไร ฉันมักจะคิดว่า VBA นั้นเป็นรุ่น VB ที่ 'พิการ' แต่เมื่อเพื่อนถามฉันเมื่อวันก่อนฉันไม่รู้ว่าความแตกต่างที่แท้จริงคืออะไร

นอกจากนี้เมื่อคุณใช้เช่น Excel นั้น VB หรือ VBA นั้นคืออะไร

คำตอบ:


175

สำหรับวัตถุประสงค์ในการเขียนโปรแกรมเกือบทั้งหมด VBA และ VB 6.0 เป็นสิ่งเดียวกัน

VBA ไม่สามารถคอมไพล์โปรแกรมของคุณให้เป็นไบนารีที่ปฏิบัติการได้ คุณจะต้องมีโฮสต์ (เช่นไฟล์ Word และ MS Word เป็นต้น) เพื่อเก็บและดำเนินโครงการของคุณ คุณจะไม่สามารถสร้าง COM DLLs ด้วย VBA ได้

นอกจากนั้นยังมีความแตกต่างใน IDE - VB 6.0 IDE นั้นมีประสิทธิภาพมากกว่าในการเปรียบเทียบ ในทางกลับกันคุณมีการรวมแอปพลิเคชันโฮสต์ใน VBA อย่างแน่นหนา แอปพลิเคชันทั่วโลกวัตถุ (เช่น "ActiveDocument") และเหตุการณ์พร้อมใช้งานโดยไม่มีการประกาศดังนั้นการเขียนโปรแกรมเฉพาะแอปพลิเคชันจึงตรงไปข้างหน้า

ถึงกระนั้นก็ไม่มีอะไรขัดขวางคุณจากการไล่ล่า Word โหลด VBA IDE และแก้ปัญหาที่ไม่เกี่ยวข้องกับ Word แต่อย่างใด ฉันไม่แน่ใจว่ามีอะไรที่ VB 6.0 สามารถทำได้ (ทางเทคนิค) และ VBA ไม่สามารถทำได้ ฉันกำลังมองหาแผ่นเปรียบเทียบใน MSDN ว่า


7
ดูเหมือนว่าจะไม่มีหน้าเปรียบเทียบที่กระชับในหน้า microsoft.com หรือซ่อนได้ดี เพียงเพื่อบอกว่าโค้ด VB 6.0 ทำงานไม่เปลี่ยนแปลงใน VBA เว้นแต่ว่าคุณอ้างอิงถึงวัตถุ COM ที่ไม่ได้จัดส่งมาพร้อมกับ VBA แน่นอน
Tomalak

7
VBA และ Vb6 ใช้ไฟล์ dll เดียวกันซึ่งเป็นสาเหตุที่รหัสทำงานทั้ง อย่างไรก็ตามมีบางอย่างเช่นวัตถุเครื่องพิมพ์ใน VB6 ที่ไม่ได้อยู่ใน VBA และฉันไม่รู้ว่าทำไมถึงเป็นเช่นนั้น มิฉะนั้นฉันเชื่อว่าไม่มีความแตกต่างในภาษาพื้นฐาน
Dick Kusleika

46
นี่คือเหตุผลที่ฉันคิดว่าควรเพิ่มว่าการเปิดเอกสาร Office มีความเสี่ยงเกือบเท่ากับการเปิดไฟล์ปฏิบัติการ
Oorang

13
VB ยังมีวัตถุคลิปบอร์ดหน้าจอและแอพนอกเหนือจากคอลเลกชันเครื่องพิมพ์ แพคเกจแบบฟอร์มแตกต่างกันอย่างสิ้นเชิงเนื่องจากคุณต้องออกไปเพื่อหลีกเลี่ยงการควบคุมแบบ Windowed ใน VB แต่ใน VBA มันยากกว่าการใช้การเรียก hWnd-oriented API เพราะการควบคุมส่วนใหญ่ไม่มีหน้าต่าง และการพูดถึงการควบคุมคุณสามารถเขียนของคุณเองใน VB และใช้พวกเขาใน VBA เช่นเดียวกับที่อื่น ๆ niggles อื่น ๆ อีกมากมาย - ดู Object Browser (กด F2 ใน IDE)
คาร์ลปีเตอร์สันอี

3
โปรดทราบว่านี่ล้าสมัยแล้ว VBA ได้รับการอัพเดตเป็น VBA 7 พร้อมรองรับประเภทข้อมูล 64 บิต (LongLong, LongPtr) และการเปลี่ยนแปลงอื่น ๆ VB ติดอยู่ที่เวอร์ชัน 6 ดังนั้นจึงไม่รองรับคุณสมบัติใหม่เหล่านี้ คำตอบนี้อธิบายการเปลี่ยนแปลงเพิ่มเติม กล่าวโดยสรุปคือตอนนี้สิ่งที่ VB ไม่สามารถทำได้ แต่ VBA สามารถทำได้
เอริค

47

VBA ย่อมาจากVisual Basic สำหรับแอปพลิเคชันและดังนั้นจึงเป็นสคริปต์สคริปต์ "for applications" ขนาดเล็กของ VB VBA พร้อมใช้งานใน Excel แต่ยังอยู่ในแอปพลิเคชัน office อื่น ๆ

ด้วย VB ผู้ใช้สามารถสร้างแอปพลิเคชัน windows แบบสแตนด์อโลนซึ่งไม่สามารถทำได้ด้วย VBA

เป็นไปได้สำหรับนักพัฒนาอย่างไรก็ตาม "ฝัง" VBA ในแอปพลิเคชันของตนเองเป็นภาษาสคริปต์เพื่อทำให้แอปพลิเคชันเหล่านั้นเป็นแบบอัตโนมัติ

แก้ไข : จากคำถามที่พบบ่อย VBA :

Q. Visual Basic สำหรับแอปพลิเคชันคืออะไร

A. Microsoft Visual Basic สำหรับแอปพลิเคชัน (VBA) เป็นสภาพแวดล้อมการเขียนโปรแกรมแบบฝังที่ออกแบบมาเพื่อให้นักพัฒนาสามารถสร้างโซลูชันที่กำหนดเองโดยใช้พลังเต็มของ Microsoft Visual Basic นักพัฒนาที่ใช้แอพพลิเคชั่นที่โฮสต์ VBA สามารถทำให้การใช้งานแอพพลิเคชั่นอัตโนมัติและขยายขอบเขตการพัฒนาโซลูชันทางธุรกิจ

โปรดทราบว่า VB.NET เป็นภาษาอื่นที่แชร์ไวยากรณ์กับ VB เท่านั้น


9
ที่จริงแล้ว Microsoft อ้างถึง VB.Net เป็น "Visual Basic" ดูmsdn.microsoft.com/en-us/vbasic/default.aspx
DOK

19
ใช่. นั่นเป็นความจริงที่ทำให้ฉันต้องการดึงผมออกมาทุกครั้งที่มองหาวิธีใช้ VB หรือ VBA เฉพาะผ่านทาง Google การตัดสินใจทางการตลาดที่โง่
Tomalak

8
@Tomalak: นั่นเป็นเหตุผลที่ผมเพิ่งสังเกตว่า ;-)
fretje

2
@DOK: ใช่แน่นอน แต่นั่นไม่ได้เปลี่ยนความจริงที่ว่า VB.NET เป็นภาษาอื่นนอกเหนือจาก Visual Basic ที่ "เราพัฒนา" รู้ว่าเป็น VB6 หรือก่อนหน้านี้
fretje

4
@j_random_hacker ในกรณีนี้มันเกือบจะรู้สึกว่า MS ปฏิบัติกับ VB.Net ซึ่งแตกต่างจาก VB อย่างน้อยก็อิงจาก Visual Studio vb page ซึ่งไม่ถูกต้อง ผิดปกติพอบทความวิกิพีเดียนี้ให้ข้อมูลเพิ่มเติมเกี่ยวกับใบหน้าของกว่า MS หน้าสตูดิโอภาพ :) en.wikipedia.org/wiki/Visual_Basic_.NET อย่างไรก็ตามคำถามฟอรัม MSDN ดูเหมือนจะมีข้อแตกต่างอย่างน้อย: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern

41

ต่อไปนี้เป็นคำตอบทางเทคนิคที่ละเอียดยิ่งขึ้นสำหรับคำถามเก่า ๆ : Visual Basic สำหรับ Applications (VBA) และ Visual Basic (pre-.NET) ไม่ใช่แค่ภาษาที่คล้ายกัน แต่เป็นภาษาเดียวกัน โดยเฉพาะ:

  • พวกเขามีเหมือนกันเปค : รายละเอียดการดำเนินงานที่เป็นอิสระจากสิ่งที่ภาษาที่มีและสิ่งที่มันหมายถึง คุณสามารถอ่านได้ที่นี่: [MS-VBAL]: ข้อกำหนดภาษา VBA
  • พวกเขามีแพลตฟอร์มเดียวกัน: พวกเขาทั้งสองรวบรวมMicrosoft P-Codeซึ่งจะถูกดำเนินการโดยเครื่องเสมือนที่แน่นอนซึ่งจะดำเนินการใน dll msvbvm [x.0] .dll

ในหนังสืออ้างอิง VB เก่าที่ฉันพบเมื่อปีที่แล้วผู้เขียน (Paul Lomax) ถึงกับยืนยันว่า 'VBA' เป็นชื่อของภาษานั้นเสมอไม่ว่าจะใช้ในแอปพลิเคชันแบบสแตนด์อโลนหรือในบริบทที่ฝังตัว (เช่น MS Office ):

"ก่อนที่เราจะไปต่อไปเราจะมาอธิบายประเด็นพื้นฐานก่อนว่า Visual Basic for Applications (VBA) เป็นภาษาที่ใช้ในการเขียนโปรแกรมใน Visual Basic (VB) โดย VB เองนั้นเป็นสภาพแวดล้อมการพัฒนาองค์ประกอบภาษาของสภาพแวดล้อมนั้นคือ VBA "

ความแตกต่างเล็กน้อย

โฮสต์กับสแตนด์อะโลน : ในทางปฏิบัติศัพท์เมื่อคนส่วนใหญ่พูดว่า "VBA" พวกเขาหมายถึง "VBA เมื่อใช้ใน MS Office" โดยเฉพาะและพวกเขาพูดว่า "VB6" เพื่อหมายถึง "VBA ที่ใช้ใน VBA แบบสแตนด์อโลนรุ่นสุดท้าย คอมไพเลอร์ (เช่น Visual Studio 6) " IDE และคอมไพเลอร์ที่มาพร้อมกับ MS Office นั้นเกือบจะเหมือนกับ Visual Studio 6 โดยมีข้อ จำกัด ว่าจะไม่อนุญาตให้รวบรวมไฟล์ dll หรือ exe แบบสแตนด์อโลน ในทางกลับกันหมายความว่าคลาสที่กำหนดในโครงการ VBA แบบฝังไม่สามารถเข้าถึงได้จากผู้ใช้ COM ที่ไม่ได้ฝังตัวเนื่องจากไม่สามารถลงทะเบียนได้

การพัฒนาอย่างต่อเนื่อง : Microsoft หยุดผลิตคอมไพเลอร์ VBA แบบสแตนด์อโลนด้วย Visual Studio 6 เนื่องจากพวกเขาเปลี่ยนเป็นรันไทม์. NET เป็นแพลตฟอร์มที่ต้องการ อย่างไรก็ตามทีม MS Office ยังคงรักษา VBA และแม้กระทั่งปล่อยรุ่นใหม่ (VBA7) ด้วย VM ใหม่ (ตอนนี้เพิ่งเรียกว่า VBA7.dll) เริ่มต้นด้วย MS Office 2010 ข้อแตกต่างที่สำคัญคือ VBA7 มีทั้ง 32- และรุ่น 64 บิตและมีการปรับปรุงเล็กน้อยเพื่อจัดการกับความแตกต่างระหว่างทั้งสองโดยเฉพาะเกี่ยวกับการร้องขอ API ภายนอก


2
ฉันจำคำพูดที่เหมือนกันในหนังสือของ Lomax ได้ แต่ให้ถ้อยแถลงอื่น ๆ ทั้งหมดตรงข้ามกับฟอรัมนี้บน Wikipedia ฯลฯ มันทำให้ฉันสงสัยว่าใครถูกและทำไมมีความขัดแย้งกัน! Lomax ยังเขียน (หน้า 3) "VBA เป็นภาษาเดียวกันไม่ว่าคุณจะใช้เพื่อสร้างแอปพลิเคชั่น VB หรือทำงานบางอย่างใน Word หรือ Excel โดยอัตโนมัติ" นอกจากนี้ "VBA เป็นภาษาที่โฮสต์และเป็นส่วนหนึ่งของเครื่องมือพัฒนาตระกูล VB"
EJ Mak

1
ถ้าคุณเลือกวิธีใช้ใน VB6 คุณไปที่การอ้างอิงภาษา VBA VB6 เช่น Word โฮสต์ภาษา VBA ในฐานะที่เป็นวัตถุใบสมัครเป็นวัตถุทั่วโลก (มาตรฐานอัตโนมัติ) VB6 จัดให้มีวัตถุ App ที่เหมาะสำหรับโปรแกรมแบบสแตนด์อโลน Word จัดเตรียมวัตถุแอปสำหรับมาโคร Word โปรดทราบว่าภาษานั้นเหมือนกันการอ้างอิงถึงสิ่งที่ขาดหายไปคือการให้บริการวัตถุที่มีให้เช่นวัตถุเครื่องพิมพ์ VB6 ซึ่งไม่ได้เป็นส่วนหนึ่งของภาษา แต่เป็นของโฮสต์
ACatInLove

15

คุณต้องการเปรียบเทียบ VBA กับ VB-Classic (VB6 .. ) หรือ VB.NET หรือไม่

VBA (Visual Basic สำหรับแอปพลิเคชัน) เป็นภาษาสคริปต์ที่ใช้ vb-classic ซึ่งฝังอยู่ในแอปพลิเคชัน Microsoft Office ฉันคิดว่ามันเป็นคุณสมบัติทางภาษาคล้ายกับ VB5 (มันขาดฟังก์ชั่นบิวอินบางตัว) แต่:

คุณสามารถเข้าถึงเอกสาร office ที่คุณเขียน VBA-script ไว้เพื่อให้คุณสามารถทำได้เช่น

  • เขียนมาโคร (= งานประจำอัตโนมัติสำหรับงานที่เกิดขึ้นเพียงเล็กน้อยในที่ทำงานของคุณ)
  • กำหนดฟังก์ชั่นใหม่สำหรับสูตรเซลล์ excel
  • ประมวลผลข้อมูลสำนักงาน

ตัวอย่าง: ตั้งค่าของเซลล์ excel

ActiveSheet.Cells("A1").Value = "Foo"

VBC และ -.NET ไม่ใช่ภาษาสคริปต์ คุณใช้พวกเขาเพื่อเขียนแอปพลิเคชันแบบสแตนด์อโลนที่มี IDE แยกต่างหากซึ่งคุณไม่สามารถทำได้กับ VBA (VBA- สคริปต์เพียง "มีอยู่" ใน Office)

VBA ไม่เกี่ยวข้องกับ VB.NET (พวกเขามีไวยากรณ์ที่คล้ายกัน)


11

ที่จริงแล้ว VBA สามารถใช้เพื่อคอมไพล์ DLLs ได้ รุ่น Office 2000 และ Office XP Developer ประกอบด้วยตัวแก้ไข VBA ที่สามารถใช้ในการสร้าง DLLs เพื่อใช้เป็น COM Addins

ฟังก์ชั่นนี้ถูกลบออกในรุ่นที่ใหม่กว่า (2003 และ 2007) ด้วยการถือกำเนิดของซอฟต์แวร์ VSTO (VS Tools สำหรับ Office) ถึงแม้ว่าคุณจะสามารถสร้าง COM addins ในรูปแบบที่คล้ายกันโดยไม่ต้องใช้ VSTO (หรือ VS.Net) โดย ใช้ VB6 IDE


10
ฟังก์ชั่นนี้ไม่ได้ถูกลบออก Microsoft ไม่ได้อัปเดต "Office XP Developer" เพื่อรองรับรุ่นที่ใหม่กว่า คุณยังคงสามารถติดตั้งนักพัฒนาซอฟต์แวร์และทำงานได้โดยไม่มีปัญหา Microsoft ไม่รองรับ นี่เป็นเพราะ VBA ที่มาพร้อมกับ 2003/2007 ยังคงเป็น VBA เวอร์ชันเดียวกันกับ XP / 2002
AMissico

6

มันเป็น VBA VBA หมายถึงVisual Basic สำหรับแอปพลิเคชันและใช้สำหรับแมโครในเอกสาร Office มันไม่สามารถเข้าถึงคุณสมบัติ VB.NET ดังนั้นมันจึงเป็นเหมือน VB6 รุ่นปรับปรุงที่มีส่วนเสริมเพื่อให้สามารถทำงานกับเอกสาร (เช่นแผ่นงานใน VBA สำหรับ Excel)


7
ไม่ VBA ไม่ใช่ VB5 / 6 รุ่นที่ได้รับการแก้ไข แต่เป็นชุดย่อย ดูที่เบราว์เซอร์วัตถุใน VB5 / 6 IDE และคุณจะเห็นไลบรารีวัตถุ VBA ที่สมบูรณ์เพื่อใช้และใช้งานในทางที่ผิด ที่กล่าวว่า VBA ทำ (โดยทั่วไปไม่จำเป็นต้องมีไลบรารีวัตถุเพิ่มเติมที่โหลดตามค่าเริ่มต้นและให้วัตถุทั่วโลกเป็นค่าเริ่มต้นซึ่งเกี่ยวข้องกับสภาพแวดล้อมของโฮสต์
คาร์ลอีปีเตอร์สัน

5

VB ไม่ได้ภาษา VB เป็นโปรแกรมที่โฮสต์ VBA เหมือนกับ Office โฮสต์ VBA VB เป็นชุดของวัตถุแอปเช่นเดียวกับ Word และ Excel และแพคเกจฟอร์มเช่นเดียวกับใน Office

ดังนั้นคุณสามารถเขียนโค้ด VBA ใน VB เท่านั้น

ป.ล.ข้อมูลนี้อยู่บนแท็บINFOในคำถาม VBหน้า VB สำหรับ VB

จากข้อมูล VBA

VBA 6 ได้รับการจัดส่งในปี 1998 และรวมถึงโฮสต์ที่ได้รับอนุญาตจำนวนมากซึ่ง ได้แก่ : Office 2000 - 2010, AutoCAD, Processbook ของ PI และ Visual Basic 6.0 แบบสแตนด์อโลน


3
คำตอบนี้ผิดธรรมดา VBA ไม่ใช่ VB6 ซึ่งเป็นเอนทิตีที่แตกต่างกันซึ่งมีคุณสมบัติมากมาย คำพูดสั้น ๆ นั้นไม่ได้พิสูจน์อะไรเลย การบอกว่ามันไม่ใช่ภาษาเพราะมันทำงานบนโฮสต์และยังประณามภาษาต่าง ๆ เช่นจาวาสคริปต์ไปยังที่ไม่ใช่ภาษาซึ่งเป็นเรื่องธรรมดาที่ไม่จริง นอกจากนี้โปรแกรม VB6 สามารถรวบรวมเป็นโปรแกรมแบบสแตนด์อโลนซึ่งทำให้พวกเขาไม่ต้องการโฮสต์ใด ๆ (นอกเหนือจาก Windows นั่นคือ)
เอริค

@ErikA คุณไม่เข้าใจสิ่งที่พวกเขาพูด VB เช่นเดียวกับ VB6 เป็นแอปพลิเคชันโฮสต์ที่รัน VBA เช่นเดียวกับแอปพลิเคชัน Office VB6 เพิ่งจะเกิดขึ้นเป็นแอพพลิเคชั่นที่ให้คุณปล่อยไบนารีเพื่อสร้างสแตนอะโลน มีคำตอบอื่น ๆ ข้างต้นที่อธิบายรายละเอียด
typedef Miles_Williams MILO

4

VBA ย่อมาจาก Visual Basic สำหรับแอปพลิเคชันและการใช้งาน Visual Basic ที่มีวัตถุประสงค์เพื่อใช้ใน Office Suite

ความแตกต่างระหว่างพวกเขาคือ VBA ถูกฝังอยู่ภายในเอกสาร Office (คุณลักษณะของ Office) VB เป็นภาษาที่ใช้ในการพัฒนาแอพพลิเคชั่น


1

VB (Visual Basic ไม่เกิน 6.0) เป็นชุด VBA (Visual Basic สำหรับแอปพลิเคชัน) ฉันรู้ว่าคนอื่นมีความเข้าใจผิดเกี่ยวกับเรื่องนี้ แต่ความเข้าใจของฉันคือความหมาย (เช่นคำศัพท์) ของ VBA รวมอยู่ใน VB6 (ยกเว้นวัตถุเฉพาะสำหรับผลิตภัณฑ์ Office) ดังนั้น VBA จึงเป็นส่วนย่อยของ VB6 ไวยากรณ์ (เช่นลำดับที่เขียนคำ) เหมือนกันใน VBA เหมือนกับใน VB6 แต่ความแตกต่างคือวัตถุที่มีให้ VBA หรือ VB6 แตกต่างกันเพราะมีวัตถุประสงค์ที่แตกต่างกัน วัตถุประสงค์เฉพาะของ VBA คือการทำงานแบบเป็นโปรแกรมโดยอัตโนมัติที่สามารถทำได้ใน MS Office ในขณะที่จุดประสงค์ของ VB6 คือการสร้าง EXE มาตรฐาน, ตัวควบคุม ActiveX, ActiveX DLLs และ ActiveX EXEs ซึ่งสามารถทำงานเดี่ยว ๆ หรือในโปรแกรมอื่น ๆ เช่น MS Office หรือ Windows


VB6 โฮสต์ภาษา VBA มันเหมือนกัน VB6 ในฐานะโฮสต์ให้วัตถุบางอย่างเช่นเดียวกับ Word เมื่อโฮสต์
ACatInLove
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.