עבור לתוכן

VBA למחוק שורות ריקות ממחרוזת

Featured Replies

פורסם

יש לי מחרוזת עם אנטרים אחריה. איך אפשר למחוק את השורות הריקות, שתהיה לי רק המחרוזת? (TRIM אינו עוזר)

תודה

פורסם
teststring = Replace(teststring, vbCrLf, "")

פורסם

לא מספיק טוב, כי ככה אתה מוחק את כל ירידות השורה והופך את כל הטקסט לשורה אחת. בעקרון צריך למצוא את כל המקומות שבהם יש שתי ירידות שורה ולהחליף אותן באחת. כנראה הכי נוח לעשות את זה עם ביטויים רגולריים, אבל נראה ש-VBA לא ממש תומכת בהם באופן פשוט, ככה שהפתרון שהייתי ממליץ עליו הוא לעבור על המחרוזת באמצעות לולאה ולמחוק את התווים המיותרים ידנית.

פורסם
  • מחבר

ואיך נראית הלולאה? מהו תנאי העצירה?

vbCrLf מסמן סוף שורה?

פורסם

סוף שורה מצוין ע"י זוג התווים המכונים בשמות "carriage return" (ובקיצור CR) ו-"line feed" (ובקיצור LF).

vbCrLf היא מחרוזת קבועה המכילה את שני התווים האלה.

מה שהציע מולטיפרוסס מוחק את כל המופעים של vbCrLf במחרוזת שלך. הבעיה היא שזה מוחק את כל סופי השורה בכלל.

דרך אחת היא להחליף כל מופע כפול של vbCrLf במופע יחיד, דהיינו:

teststring = Replace(teststring, vbCrLf & vbCrLf, vbCrLf)

הבעיה היא שאם יש יותר משורה אחת ריקה ברצף, זה לא ימחק את כל השורות הריקות. פתרון אפשרי לזה הוא לעשות את הפעולה הנ"ל בלולאה, עד שהמחרוזת כבר לא מכילה פעמיים vbCrLf ברצף, דהיינו:

Do While InStr(teststring, vbCrLf & vbCrLf) > 0
teststring = Replace(teststring, vbCrLf & vbCrLf, vbCrLf)
Loop

זה לא פתרון יעיל (הוא עובר על המחרוזת כמה פעמים), אבל הוא הכי פשוט מבחינת קוד.

פורסם
  • מחבר

זה בכלל לא נכנס לי לתנאי של הלולאה

InStr(str, vbCrLf & vbCrLf) = 0 למרות שיש לי שורות ריקות בסוף המחרוזת

פורסם
  • מחבר

עדיין לא עובד (כלומר, לא נכנס ללולאה)

פורסם
  • מחבר

כן

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים