VBA เพื่อย้ายกล่องข้อความทำงานแล้วหยุดทำงาน


1

รหัสนี้ควรหากล่องข้อความธรรมดา / พื้นฐานบนแผ่นงานแล้วเลื่อนไปทางซ้าย จากนั้นไปที่แผ่นงานถัดไปและทำสิ่งเดียวกัน ทำจนกระทั่งแผ่นสุดท้าย

มันใช้งานได้ (ขณะที่ฉันหมุนไปรอบ ๆ โดยใช้ F8) แต่จากนั้นแผ่นถัดไปที่ระบุว่าวัตถุไม่รองรับคุณสมบัติของวิธีการนี้

ฉันไม่รู้ว่าทำไมสิ่งนี้จึงเกิดขึ้น

Dim I As Integer
Dim txBox As Shape
Set txBox = ActiveSheet.Shapes("Text Box 1")


For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    txBox.Select
    **Selection.ShapeRange.IncrementLeft 586.5**

Next I

End Sub

คำตอบ:


3

สมมติว่ากล่องข้อความชื่อ "กล่องข้อความ 1" ในแต่ละแผ่นคุณเพียงแค่ต้องย้ายSet txBox =บรรทัดภายในForวงของคุณ มิฉะนั้นtxBoxอ้างอิงไปยังกล่องข้อความบนแผ่นงานที่ใช้งานอยู่เมื่อคุณเริ่มแมโครของคุณ เนื่องจากtxBoxไม่ได้อยู่บนแผ่นงานที่ใช้งานอีกต่อไปSelectionไม่ได้อ้างถึงtxBoxแต่มีแนวโน้มที่เซลล์และไม่จำเป็นต้องเป็นกล่องข้อความดังนั้นข้อผิดพลาด "วัตถุไม่สนับสนุนคุณสมบัติหรือวิธีการนี้" โค้ดด้านล่างหวังว่าจะทำการหลอกลวงหรืออย่างน้อยก็ให้คุณเคลื่อนที่ในทิศทางที่ถูกต้อง

Dim I As Integer
Dim txBox As Shape

For I = 1 To Worksheets().Count
    Worksheets(I).Activate
    Set txBox = ActiveSheet.Shapes("Text Box 1")
    txBox.Select
    Selection.ShapeRange.IncrementLeft 586.5
Next I

แก้ไข:
เช่นกันที่คุณสามารถปรับปรุงประสิทธิภาพการทำงานของแมโครของคุณโดยการหลีกเลี่ยงการทั้งหมด.Select, .Activate, Selectionโทร

Dim ws as Worksheet
Dim txBox As Shape

For Each ws in Worksheets
    Set txBox = ws.Shapes("Text Box 1")
    txBox.IncrementLeft 586.5
Next ws

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