אופיס 365 עזרה VBA - משתנה לטווח כותרת עליונה, והשמת ערך סגנון במשתנה

  • הוסף לסימניות
  • #1
משתנה מסוג range משמש לערכי טווח מסוימים. לדוגמא: בשביל להכניס הטקסט המופיע בפסקה 1 במסמך לתוך הערת שוליים מס. 1 אכתוב את הקוד הבא:
קוד:
Sub A()
Dim amyRenge As Range, myRenge As Range
Set amyRenge = ActiveDocument.Paragraphs(1).Range
Set myRenge = ActiveDocument.Footnotes(1).Range
myRenge = amyRenge
End Sub

וכאן הבן שואל:
א. האיך ניתן להגדיר שהכותרת העליונה או התחתונה תהווה את ערך המשתנה range או משתנה מסוג אחר.

ב. בנוסף, איך אוכל להגדיר למשתנה במקום: Paragraphs(1) - Paragraphs בסגנון X
כלומר, שהמשתנה יכיל את הפסקה במסמך שיש בה סגנון X (לא את הסגנון עצמו אלא את התוכן של הפסקה שבסגנון זה)
(האנגלית קצת משבשת את הסדר, אבל אני מקווה שהובנתי...)

נ.ב. אני יודע שאפשר לעשות את ב. ע"י חיפוש והעתקה -
קוד:
Sub m5()
    With selection.Find
        .Style = ActiveDocument.Styles("מאמר")
        .Execute
    End With
        selection.Copy
End Sub
אבל יותר שימושי בשבילי לעשות את זה ע"י קביעת טווח הסגנון כערך משתנה.


תודה מראש!
 
  • הוסף לסימניות
  • #2
הבא לקמן הוא לפי הנראה בהשקפה ראשונה, וייתכנו בו טעויות, ובטח תעמידני עליהם:
א] כל קובץ ווארד מכיל "אוספים" (Collections) של אובייקטים, כמו: מקטעים, פיסקאות, סגנונות וכו' וכו' – כאשר בכל האובייקטים יש היררכי' מובנית.
ולדוגמא, בענין ששאלת בדבר הכותרות העליונות או התחתונות:
אובייקטי הכותרות – בהיררכי' של וואָרד – נלווים הם לאובייקטי המקטעים. וזאת מפני שלכל מקטע ניתן להגדיר כותרות נפרדות. וזה אומר, שבכדי להגיע לאובייקטי הכותרות, אתה צריך "לעבור" את אובייקט המקטעים.
ולדוגמא, בכדי להקצות משתנה "טווח" לכותרת-עילית-קבועה – (כי הרי גם לכותרות עצמם יש "אוסף", והיינו, שישנם כמה סוגי כותרות: לעמוד ראשון, לעמוד זוגי, ברירת-מחדלית) – של מקטע 1 שבקובץ, רושמים:
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
ועד"ז כשרוצים להקצות משתנה "טווח" לכותרת של המקטע הנוכחי של הבחירה:
Selection.Sections(1).Headers(wdHeaderFooterPrimary).Range
ועד"ז לשאר סוגי הכותרות, כמו גם הכותרות התחתיות.
ב] ומזה לענין הקצאת משתנה "טווח" לפיסקאות בעלות סגנון מסויים:
כיון שאובייקטי הפיסקאות ואובייקטי הסגנונות נמצאים בב' "אוספים" שונים, הנה לפום ריהטא לא נראה דרך להקצות טווח בצורה ישירה לפיסקאות בעלת סגנון מסויים – אם לא ע"י חיפוש (על דרך כפי שתיארת); או ע"י העברה (iteration) על ה"אוסף" של הפיסקאות (ע"י For each וכו'), ובדיקת מהו שם "סגנון הפיסקא" שלו, ולעצור על ידו באם זהה הוא לשם הסגנון אותו אתה מגדיר.
 
  • הוסף לסימניות
  • #3
תודה רבה! עזר לי מאוד.

בנוגע ל-א] ישנם ג' אפשרויות: א. (wdHeaderFooterPrimary) - מתייחס לכותרת הראשית של המסמך. ב. (wdHeaderFooterFirstPage) - מתייחס לכותרת בעמוד ראשון. ג. (wdHeaderFooterEvenPages) - שלא הבנתי למה מתייחס.

בנוגע ל-ב] לא ניסיתי, אבל ע"י חיפוש ניתן להגיע בעקיפין לפסקה הנרצית שתהיה ה-selection ולו נוכל להקצות את המשתנה. אבל עדיין זה עילג למדי...
באשר לדרך השניה שציינת, אשמח אם תוכל לפרט ולתת דוגמה.
 
  • הוסף לסימניות
  • #4
א] wdHeaderFooterEvenPages = הכוונה לכותרות לעמוד זוגי ("פעיל" כאשר מגדירים שיהיו כותרות שונות לעמוד זוגי\לא זוגי).
ב] אכן, גם חיפוש יכול להועיל, וכפי שציינתי בתגובה הקודמת. ולענ"ד אינו "עילג" כלל (אם כי תלוי כמובן בפרטים אחרים).
ולענין הדוגמא לאופן השני - הנה בדוגמא דלהלן המאַקראָ בודקת כל פיסקא מתחילת הקובץ (מה שכמובן ניתן להגדיר בצורה אחרת, שתבדוק למשל רק מעמידת הסמן ואילך), ובאם שם הסגנון שלה זהה לסגנון "x" – הוא בוחרו, ועוצר את פעולת המאַקראָ:
קוד:
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs
    If UCase(p.Style) = UCase("x") Then
        p.Range.Select
        End
    End If
Next p
 
  • הוסף לסימניות
  • #5
ומדוע זה קיים אך לכותרות עמודים זוגיים?
 
  • הוסף לסימניות
  • #6
בפשטות - מפני שעמוד לא זוגי כבר כלול ב-primary header. ולא הוסיפו עלי' אלא הנחשב כחריג (ע"י הגדרות המשתמש): 1) עמוד ראשון של מקטע; 2) עמוד זוגי.
 
  • הוסף לסימניות
  • #7
נכתב ע"י לייזער;677365:
בפשטות - מפני שעמוד לא זוגי כבר כלול ב-primary header. ולא הוסיפו עלי' אלא הנחשב כחריג (ע"י הגדרות המשתמש): 1) עמוד ראשון של מקטע; 2) עמוד זוגי.

שאלה נוספת -
אינני מבין מדוע אינני מצליח לבצע select למשתנה אחרי שהקציתי אותו לטווח זה.
נניח אם אני כותב כך:
קוד:
Dim a As Range
Set a = ActiveDocument.Sections(3).Range
a.Select
התוצאה היא שהוא בוחר את מקטע מס. 3, איך אוכל על דרך זה לבחור את הכותרת העליונה של מקטע ספציפי? (אחרי שביטלתי את הקשר שלו למקטע הקודם)
 
  • הוסף לסימניות
  • #8
לא ברור לי שאלתך (כמו גם, ההקשר למה שציטטת מדבריי בענין כותרות לעמודים זוגיים) --
האם כוונתך לזה:
קוד:
a.Sections(1).Headers(wdHeaderFooterPrimary).Range.Select
או לחילופין (באופן ישיר):
קוד:
ActiveDocument.Sections(3).Headers(wdHeaderFooterPrimary).Range.Select
או שמא כוונתך לזה:
קוד:
Dim mySec As Section
Set mySec = ActiveDocument.Sections(3)
mySec.Headers(wdHeaderFooterPrimary).Range.Select
וראה מה שנכתב לעיל בענין מיקומו של הכותרות בהיררכי' של וואָרד.
 
  • הוסף לסימניות
  • #9
שאלתי היתה בעצם, מדוע כשם ש:
קוד:
set a = ActiveDocument.Sections(3).Range
a.select
בוחר את מקטע 3,
קוד:
set a = ActiveDocument.Sections(3).Headers(wdHeaderFooterPrimary).Range
a.select
לא בוחר את כותרת מקטע 3

אבל עם הקוד שנתת הסתדרתי. תודה שוב.
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה