اکسل به شما این امکان را می دهد که انواع اشیاء گرافیکی را در کاربرگ خود قرار دهید. یک نوع شیء گرافیکی در واقع حاوی متن است - یک جعبه متن. اگر تعداد زیادی جعبه متن در یک کاربرگ دارید، ممکن است از خود بپرسید که آیا راهی برای استخراج متن از هر جعبه متن و قرار دادن آن در خود کاربرگ وجود دارد.
هیچ دستوری برای این کار وجود ندارد. در عوض باید از یک ماکرو استفاده کنید. ماکرو زیر را از طریق هر جعبه متنی در یک کاربرگ گام می گذارد و استخراج مورد نظر را انجام می دهد:
Sub ExtractText()
Dim shp As Shape
Dim sLoc As String
For Each shp In ActiveSheet.Shapes
With shp
If Left(.Name, 8) = "Text Box" Then
sLoc = .TopLeftCell.Address
Do Until Range(sLoc) = ""
sLoc = Range(sLoc).Offset(1, 0).Address
Loop
Range(sLoc) =.TextFrame.Characters.Text
.Delete
End If
End With
Next
End Sub
از آنجایی که اکسل تمام اشکال گرافیکی را در مجموعه Shapes ذخیره می کند، می توانید در مجموعه قدم بگذارید و تصمیم بگیرید که با کدام شکل ها کار کنید. در این حالت هشت کاراکتر اول نام اشکال بررسی می شود. تنها در صورتی که نام با "Text Box" شروع شود، ماکرو شکل را یک جعبه متنی در نظر می گیرد که می توان متن را از آن استخراج کرد.
به جای بررسی عبارت "Text Box" در نام، ماکرو همچنین می تواند بررسی کند که چه نوع شکلی در نظر گرفته شده است. اگر ترجیح می دهید این کار را انجام دهید، به سادگی خط تست (اگر چپ...) را با خط تست زیر جایگزین کنید:
If shp.Type = msoTextBox Then
متغیر sLoc برای ذخیره مکان جعبه متن استفاده می شود که در ویژگی TopLeftCell. سپس از یک حلقه Do برای اطمینان از خالی بودن سلولی که آدرس به آن اشاره می کند استفاده می شود. (این کار از بازنویسی هر گونه محتوای موجود سلول جلوگیری می کند.) اگر خالی نباشد، آدرس به سلول بعدی در ستون "افزایش" داده می شود.
با تعیین آدرس یک سلول خالی، متن جعبه متن در سلول ذخیره می شود. سپس از روش .Delete برای خلاص شدن از شر جعبه متن واقعی استفاده می شود.