ตัวแปรสาธารณะทั้งหมดใน VBA Macros ในสำนักงานของฉันหยุดทำงานเมื่อเช้านี้


6

มันจะเปิดออกฉันเป็นคนโง่ (หรืออย่างน้อยอย่างไร้ความหวังที่ไม่มีประสบการณ์กับสิ่งที่พัฒนาซอฟต์แวร์นี้ทั้งหมด) ด้านล่างคือสิ่งที่ฉันใช้เวลาทั้งวันตื่นตระหนก ฉันจะเขียนคำตอบรายละเอียดสิ่งที่ฉันเห็นสิ่งที่การกระทำตามและสิ่งที่เกิดขึ้นจริง

tl; dr:ฉันคิดว่า IDE ของฉันทำงานอย่างไรและมันใช้งานได้จริงอย่างไรเป็นสองสิ่งที่แยกจากกัน มีจริงข้อผิดพลาดในรหัสของฉัน แต่เนื่องจากฉันตีความสิ่งที่ฉันคิดว่า IDE ของฉันบอกฉันฉันคิดว่าปัญหานั้นใหญ่กว่ามาก และฉันเป็นคนงี่เง่าที่ยังไม่ได้ใช้งานการควบคุมเวอร์ชัน

สิ่งที่ฉันเขียนก่อนหน้านี้:

ดังนั้นฉันไม่ใช่ SysAdmin จริงๆ แต่ฉันเป็น "คนไอที" อย่างมีประสิทธิภาพสำหรับ บริษัท ของฉัน (เราคือพนักงาน 12 คน)

บางครั้งระหว่าง 7:00 GMT เมื่อคืน 25 / สิงหาคม / 2015 และ 11am GMT เช้านี้ 26 / august / 2015, vba macros ทั้งหมดในคอมพิวเตอร์ทุกเครื่อง (เราเรียกใช้ Excel 2010 และ Excel 2013) เริ่มแสดงพฤติกรรมโดยประกาศตัวแปรสาธารณะ (ซึ่งควรจะมีอยู่ สำหรับรูทีนย่อยทั้งหมดในเวิร์กบุ๊กที่กำหนด) จะใช้ได้เฉพาะภายในโมดูลที่ประกาศไว้เท่านั้น

สิ่งนี้ทำให้มาโครจำนวนมากของเราใช้งานไม่ได้

ฉันสงสัยว่ามีการอัปเดตของ Microsoft ที่มี messed กับ Excel แต่ฉันไม่พบการยืนยันใด ๆ ของทางออนไลน์ นอกจากนี้เซิร์ฟเวอร์เดสก์ท็อประยะไกลของเรา (ซึ่งไม่ได้อัปเดตโดยอัตโนมัติ) กำลังแสดงพฤติกรรมเดียวกัน ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมมาก

อัปเดต:ยังไม่มีการอัปเดต windows เมื่อเร็ว ๆ นี้ นี่เป็นข่าวร้ายจริง ๆ เพราะมันหมายความว่ามีบางสิ่งผิดปกติ (อาจเป็นเอกลักษณ์) การกำหนดขอบเขตตัวแปรควรเป็นส่วนพื้นฐานของภาษา มันไม่ควรเป็นสิ่งที่สามารถเปลี่ยนแปลงได้ และถึงกระนั้นก็มีในเครือข่ายทั้งหมดดูเหมือนตัวเอง


มีการรีระบบทั้งหมดหรือไม่
มาลาคี

ไม่ใช่ทุกคน แต่ทุกคนที่ว่างในระหว่างวันประมาณครึ่งหนึ่ง
Kaz

สำหรับเซิร์ฟเวอร์ฉันไม่ได้กำลังจะทำอะไรกับมัน
Kaz

หากคุณสร้างมาโครใหม่วันนี้มันจะทำงานเหมือนเดิมหรือไม่? หากคุณใช้ System Restore เพื่อให้เวิร์กสเตชันเครื่องใดเครื่องหนึ่งกลับไปก่อนวันที่สงสัยของคุณและลองอีกครั้งมันจะกลับไปทำงานเหมือนเดิมหรือไม่? คุณวางตัวแปร "สาธารณะ" ไว้ใน Excel ตรงไหน ในโมดูลหรือไม่?
Ƭᴇcʜιᴇ007

คำตอบ:


4

เกิดอะไรขึ้น:ฉันเปิดมาโครเมื่อเช้านี้เพื่อทำงานเพื่อขยาย ฉันวิ่งไปตรวจสอบว่ามันยังทำงานอยู่ มันโยน "ข้อผิดพลาดอัตโนมัติ"

[บันทึกด้านข้าง] (ฉันมักจะคุ้นเคยกับการเห็นตัวแปรทั่วโลกของฉันในหน้าต่างไอเดียของฉันในแท็บแบบดึงลงที่ดีภายใต้ชื่อโมดูลปรากฎว่าเกิดขึ้นเมื่อคุณประกาศในที่สาธารณะ คุณกำลังดูอยู่ฉันไม่ทราบสิ่งนี้และมาโครใหม่ของฉันมีตัวแปรสาธารณะทั้งหมดของฉันในโมดูลแยกต่างหาก) [กลับ]

ดังนั้นฉันจึง debugged รหัสของฉันได้ดูว่าทำไมวัตถุแผ่นงานนี้โยนข้อผิดพลาดและเห็น: <No Variables>ในหน้าต่างท้องถิ่นของฉันที่ตัวแปรสาธารณะของฉันเคยเป็น ตามธรรมชาติฉันตื่นตระหนก ฉันคิดว่าโปรแกรมจะต้องหยุดการอ้างอิงตัวแปรสาธารณะในโมดูลอื่น ๆ ฉันตรวจสอบคอมพิวเตอร์เครื่องอื่นทั้งหมดในสำนักงานของฉันเหมือนกัน ฉันค้นหาอินเทอร์เน็ตอย่างเมามัน ไม่มีอะไรเกี่ยวกับเรื่องนี้ ฉันหันไปหา Stack Overflow และ Server Fault และ Super User และห้องสนทนาที่ตรวจสอบโค้ด ไม่มีโชค.

จากนั้นฉันก็ตื่นตระหนกจริงๆ ฉันเต็มใจโทรหาฝ่ายสนับสนุนด้านเทคนิคของ Microsoft

ไม่จำเป็นต้องพูดสิ่งนี้มันแย่มากจนฉันยอมแพ้ ออกไปเล็กน้อยและเอาความผิดหวังของฉันออกมาบนพื้นอาคารที่ว่างเปล่าของฉันด้วยคาตานะของฉัน (LARP ปลอดภัยดังนั้นจึงไม่เกิดความเสียหายกับตัวอาคาร)

จากนั้นฉันก็กลับมากลับไปคุยคุยกับคนอื่น ๆ ลองสิ่งอื่น ๆ อีกและในที่สุดก็ค้นพบสิ่งที่เกี่ยวกับหน้าต่างชาวบ้านซึ่งทำให้ฉันสามารถค้นหาปัญหาที่แท้จริงของรหัสของฉัน:

มาโครของฉันปิดสมุดงานก่อนจุดในรหัสที่ฉันพยายามอ้างอิงแผ่นงาน นั่นมัน

ในทั้งหมดฉันเสียทั้งวันพยายามที่จะแก้ไขปัญหาที่ไม่มีอยู่

ดังนั้นนี่คือรายการของสิ่งที่ฉันสามารถทำได้ / ควรจะทำที่จะป้องกันได้:

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

หน้าต่างการเฝ้าดู:ใน VBA IDE สิ่งนี้จะช่วยให้คุณระบุตัวแปรและติดตามสถานะของมันตลอดทั้งมาโคร สิ่งนี้จะแสดงให้ฉันเห็นว่าตัวแปรของฉันยังคงมีอยู่มันยังคงถูกอ้างอิงอยู่มันก็ถูกทำให้ว่างเปล่าในจุดหนึ่งของรหัส

ที่จริงแล้วเรียกใช้แมโครเก่า:เพราะฉันคิดว่าหน้าต่างไอเดียนั้นแสดงตัวแปรสาธารณะด้วยและพวกมันไม่ได้อยู่ที่นั่น สิ่งที่ฉันทำในคอมพิวเตอร์เครื่องอื่น ๆ นั้นกลายเป็นแมโครดูว่าพวกเขาไม่ได้อยู่ที่นั่นและถือว่าแย่ที่สุด หากฉันเพิ่งเรียกใช้แมโครใด ๆ ของฉันจริง ๆ ก่อนหน้านี้หนึ่งวันปัญหานี้จะกลับคืนมา

การทดสอบ TDD / หน่วย:ฉันจะผิดพลาดเกือบจะทันทีที่ฉันแนะนำมันและแน่นอนภายในไม่กี่นาทีที่จะเขียนมันซึ่งจะให้คำแนะนำอย่างมากเกี่ยวกับสิ่งที่ผิดพลาดและป้องกันสิ่งนี้ทั้งหมดก่อนที่จะเริ่มต้น

ไม่ใช่การตื่นตระหนก:ฉันลืม / ไม่ลองสิ่งต่าง ๆ ที่เห็นได้ชัดมาก ๆ ใครก็ตามที่พิสูจน์ทฤษฎีของฉันผิด แต่เพราะฉันคิดว่าฉันมีปัญหาฉันจึงไปหาหลักฐานที่จะยืนยันไม่ใช่เพื่อพิสูจน์ว่าหักล้างมัน

ในด้านบวกอย่างน้อยตอนนี้ฉันฉลาดกว่าที่ฉันเป็นเมื่อเช้านี้

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