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

คู่มือนี้แสดงปัญหาที่พบได้ทั่วไปซึ่งคุณอาจพบเมื่อแปลงโค้ด Visual Basic for Applications (VBA) เป็น Apps Script โดยใช้ตัวแปลงมาโคร

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

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

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

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

ทริกเกอร์

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

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

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

ทริกเกอร์ตามเหตุการณ์

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

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

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

Userforms

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

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

  1. เปิดไฟล์ที่แปลงแล้วในชีตในคอมพิวเตอร์
  2. ที่ด้านบน ให้คลิกส่วนขยาย > ** Apps Script**
  3. ที่ด้านซ้ายของเครื่องมือแก้ไขข้าง "ไฟล์" ให้คลิกเพิ่มไฟล์ > HTML เราขอแนะนำให้ตั้งชื่อไฟล์ HTML ให้เหมือนกับ UserForm VBA ต้นฉบับ
  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 เป็นชีต ระบบจะไม่แปลงช่วงที่ตั้งชื่อแล้วบางประเภท เนื่องจากไม่รองรับ ตารางต่อไปนี้แสดงตัวอย่างที่พบบ่อย

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

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