แก้ไขปัญหาทั่วไป

ปัญหาทั่วไปที่คุณอาจพบเมื่อแปลงโค้ด VBA เป็น Apps Script ด้วยตัวแปลงมาโครดังที่แสดงด้านล่าง

การพิมพ์

VBA API ที่พิมพ์ไฟล์จะได้รับการแปลงเป็น Apps Script โดยอัตโนมัติ แต่อาจมีการทำงานแตกต่างจาก VBA API เดิม ตัวอย่าง 2 ตัวอย่างมีดังนี้

API ของ VBAลักษณะการทำงานใน Apps Script
PrintOutจะแปลงเป็น Apps Script แต่ Apps Script API จะพิมพ์เป็นไฟล์แทนเครื่องพิมพ์ คุณจะพิมพ์ไฟล์ PDF ด้วยตนเองได้
PrintToFileแปลงเป็น Apps Script ระบบจะบันทึกไฟล์ PDF ไว้ในโฟลเดอร์ไดรฟ์ของฉัน

รายการที่ไม่ได้แปลง

ฟีเจอร์ต่อไปนี้ไม่ได้แปลงโดยตัวแปลงมาโคร และจําเป็นต้องแปลงด้วยตนเอง

ทริกเกอร์

ตัวแปลงมาโครไม่ได้แปลงทริกเกอร์ 2 ประเภท แป้นพิมพ์ลัด และทริกเกอร์ที่ขึ้นอยู่กับเหตุการณ์บางอย่าง ในหลายกรณี คุณสามารถสร้างทริกเกอร์เหล่านี้ได้เอง

แป้นพิมพ์ลัด

หากต้องการเพิ่มแป้นพิมพ์ลัด ให้ทำตามขั้นตอนเพื่อนำเข้าฟังก์ชันเป็นมาโคร

ทริกเกอร์ที่ขึ้นอยู่กับเหตุการณ์

บางเหตุการณ์จากโค้ด VBA เช่น BeforeClose หรือ BeforeSave ไม่มีค่าเทียบเท่าใน Apps Script แต่คุณอาจสร้างวิธีแก้ปัญหาชั่วคราวได้

สำหรับเหตุการณ์อย่างเช่น BeforeClose คุณจะสร้างเมนูหรือปุ่มที่กำหนดเองสำหรับคลิกเพื่อดำเนินการที่จำเป็นก่อนปิดสเปรดชีตได้

เนื่องจาก Google ชีตจะบันทึกการแก้ไขแต่ละรายการโดยอัตโนมัติ จึงไม่สามารถแก้ปัญหาเฉพาะหน้าสำหรับเหตุการณ์อย่าง BeforeSave ได้

รหัสผู้ใช้

ใน VBA UserForm คือหน้าต่างหรือกล่องโต้ตอบในอินเทอร์เฟซผู้ใช้ (UI) ของแอปพลิเคชัน ตัวแปลงมาโครจะไม่แปลง UserForms คุณสร้างแท็กเหล่านี้ด้วยตนเองได้ใน Apps Script

สร้างกล่องโต้ตอบของแบบฟอร์มผู้ใช้

  1. เปิดไฟล์ที่แปลงใน Google ชีตจากคอมพิวเตอร์
  2. ที่ด้านบน ให้คลิกส่วนขยาย > ** Apps Script**
  3. ทางด้านซ้ายของตัวแก้ไข ข้าง "ไฟล์" ให้คลิกเพิ่มไฟล์ > HTML เราขอแนะนำให้คุณตั้งชื่อไฟล์ HTML เป็นชื่อเดียวกับ VBA UserForm เดิม
  4. เพิ่มฟิลด์และข้อมูลที่คุณต้องการให้ปรากฏในแบบฟอร์มของคุณ ดูข้อมูลเพิ่มเติมเกี่ยวกับแบบฟอร์ม HTML ได้ที่ W3school.com
  5. ทางด้านซ้าย ให้คลิกไฟล์ Apps Script (ไฟล์ GS) ที่มีโค้ดที่แปลงแล้ว
  6. หากมีทริกเกอร์ onOpen() ในโค้ดอยู่แล้ว ให้อัปเดตทริกเกอร์ด้วยโค้ดด้านล่าง หากไม่มีทริกเกอร์ onOpen() ในโค้ด ให้เพิ่มโค้ดด้านล่าง
    function onOpen() {
     SpreadsheetApp.getUi()
         .createMenu('User Form')
         .addItem('Show Form', 'showForm')
         .addToUi();
    }
    function showForm() {
     var html = HtmlService.createHtmlOutputFromFile('userform_module_name')
         .setWidth(100)
         .setTitle('Sign-up for Email Updates');
     SpreadsheetApp.getUi().showSidebar(html);
    }
        
  7. แทนที่ userform_module_name ด้วยชื่อไฟล์ HTML ที่คุณเพิ่ม
  8. คลิกบันทึกโปรเจ็กต์ ที่ด้านบน
  9. สลับไปที่สเปรดชีตใน Google ชีตแล้วโหลดหน้านี้ซ้ำ
  10. ที่ด้านบนของสเปรดชีตใน Google ชีต ให้คลิกแบบฟอร์มผู้ใช้ > แสดงแบบฟอร์ม

ช่วงที่ตั้งชื่อแล้ว

ใน Excel ช่วงที่ตั้งชื่อแล้วคือชื่อที่กำหนดให้กับเซลล์เดียวหรือช่วงของเซลล์

เมื่อแปลงไฟล์ Excel เป็น Google ชีต ระบบจะไม่แปลงช่วงที่ตั้งชื่อบางประเภท เนื่องจากระบบไม่รองรับช่วงดังกล่าว ตัวอย่าง 2 ตัวอย่างมีดังนี้

ไม่รองรับช่วงที่ตั้งชื่อแล้วคำอธิบาย
ตารางไม่รองรับใน Google ชีต แต่มีวิธีแก้ปัญหาชั่วคราว

หากต้องการสร้างช่วงที่ตั้งชื่อนี้ในชีตใหม่ ให้เพิ่มช่วงที่ตั้งชื่อแล้วที่ชี้ไปยังสัญลักษณ์ A1 ของช่วงตาราง ใช้ชื่อเดียวกันกับช่วงที่ตั้งชื่อดั้งเดิมในโค้ด VBA เพื่อให้โค้ดที่แปลงแล้วจดจำได้
รายการช่วงไม่รองรับใน Google ชีต เนื่องจากไม่มีวิธีแก้ปัญหาเฉพาะหน้า