শব্দ ভিবিএ: একটি পূর্বনির্ধারিত ব্যাপ্তির মধ্যে কীভাবে নির্বাচন পরিচালনা করবেন?


1

আমার এখানে ওয়ার্ড ভিবিএ কোডের দুটি ব্লক রয়েছে যা প্রতিটি পৃথকভাবে কাজ করে, তবে কাঙ্ক্ষিত ফলাফল পাওয়ার জন্য আমার একত্রিত হওয়া দরকার। একটি পাঠ্য (ওআরএনজি) এর ব্যাপ্তি সনাক্ত করে, অন্যটি একটি নির্বাচন পরিচালনা করে some কিছু পাঠ্য পরিবর্তন করতে অনুসন্ধান সন্ধান করুন। আমার বাছাই সীমাবদ্ধ করা দরকার o

পটভূমি: আমার শিরোনামের অধীনে বিভাগগুলিতে বিভক্ত নিউজ নিবন্ধগুলির একটি পরিবর্তনশীল তালিকা রয়েছে (শিরোনাম 1 শৈলীতে একক অনুচ্ছেদ), যাও পরিবর্তনশীল। আমার নিবন্ধের উত্স রেখাটি নির্বাচন করতে হবে (সাহসের সাথে একক অনুচ্ছেদ) এবং এটি নিবন্ধের শিরোনামের শেষে (শিরোনাম 2 স্টাইলে একক অনুচ্ছেদ) অনুলিপি করতে হবে। তবে বিভাগের শিরোনাম যদি একটি নির্দিষ্ট শব্দ হয় তবে এই বিভাগ থেকে কিছু বিভাগকে বাদ দেওয়া দরকার।

পরিস্থিতি: নিবন্ধের সোর্স লাইনগুলি খুঁজে পেতে এবং নিবন্ধ শিরোনামের শেষে (সিলেকশন.ফাইন্ড ব্যবহার করে পুরো ডকুমেন্টটি লুপিং) এ অনুলিপি করার জন্য আমার কাছে কার্যকরী কোড রয়েছে। প্রযোজ্য বিভাগের শিরোলেখগুলির মধ্যে সীমা (ওআরএনজি) তৈরি করে বিভাগের মাধ্যমে নথির অংশটি লুপ করে পাঠ্য বিভাগের প্রথম বিভাগটি প্রয়োগ করা দরকার যেখানে পাঠ্যের বিভাগগুলি সনাক্ত করতে আমার কাছে কার্যকরী কোড রয়েছে। আমাকে যা করতে হবে তা হল কোডের দ্বিতীয় সেট দ্বারা নির্দিষ্ট রেঞ্জের মধ্যে কোডের প্রথম সেটটি (যা নির্বাচন-ফাইন্ডের উপর ভিত্তি করে) চালানো হয়। আমার উদ্দেশ্যটি ছিল রেঞ্জগুলি চিহ্নিত করার জন্য কোডটি লুপ করা এবং এটি প্রতিটি পরিসীমা চিহ্নিত করে, সেই সীমাটির মধ্যে শিরোনামগুলিতে উত্স রেখাগুলি অনুলিপি করার জন্য কোডটি চালান, তবে আমি নির্বাচনকে সীমাবদ্ধ করার কোনও উপায় খুঁজে পাই না search নির্দিষ্ট ব্যাপ্তি (ওআরএনজি)।

কেউ কি আমাকে এই সাহায্য করতে পারেন, দয়া করে?

কোডের প্রথম ব্লক (প্রযোজ্য বিভাগের শিরোনামগুলির মধ্যে ব্যাপ্তিগুলি চিহ্নিত করুন)

Sub SourceToArticleHeadersP2()
Dim oRng As Range
Dim oRngstart As Range
Dim oRngend As Range
Dim ArticleSource As Range
Dim ArticleHeader As Range
Dim excludedTerms(1 To 5) As String
excludedTerms(1) = "Term1"
excludedTerms(2) = "Term1"
excludedTerms(3) = "Term1"
excludedTerms(4) = "Term1"
excludedTerms(5) = "Term1"

Selection.HomeKey Unit:=wdStory
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Style = ActiveDocument.Styles(wdStyleHeading1)
.Text = ""
.Execute
End With
Do While Selection.Find.Found
 For i = 1 To 5
  If InStr(1, Selection.Text, excludedTerms(i), vbTextCompare) Then
  Selection.Collapse wdCollapseEnd
  MsgBox excludedTerms(i) & " detected - skipping"
  Selection.Find.Execute
  End If
 Next i
 Set oRngstart = Selection.Range
 MsgBox "Start = " & oRngstart
 Selection.Collapse wdCollapseEnd
 With Selection.Find
  .Forward = True
  .ClearFormatting
  .Wrap = wdFindStop
  .Style = ActiveDocument.Styles(wdStyleHeading1)
  .Text = ""
  .Execute
 End With
 If Selection.Find.Found Then
  Set oRngend = Selection.Range
  MsgBox "End = " & oRngend
  Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=oRngend.Start)
  Selection.Collapse wdCollapseStart
  Selection.Find.Execute
 Else
  MsgBox "End = End of Document"
  Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=ActiveDocument.Range.End)
 End If
Loop
[SECOND BLOCK OF CODE GOES HERE]
End Sub

কোডের দ্বিতীয় ব্লক (উত্সের লাইনগুলি চিহ্নিত করুন এবং ফর্ম্যাটের উপর ভিত্তি করে নিবন্ধ শিরোনামের লাইনগুলিতে অনুলিপি করুন)। আমার এটি পরিবর্তন করতে হবে যাতে এটি কেবল পাঠ্য ওআরএনজি-র পাঠের পরিসরে কাজ করে।

With Selection.Find
 .Forward = True
 .ClearFormatting
 .Wrap = wdFindStop
 .Style = ActiveDocument.Styles(wdStyleHeading2)
 .Text = ""
 .Execute
End With
Do While Selection.Find.Found
 Set ArticleHeader = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
 With Selection.Find
  .Forward = True
  .ClearFormatting
  .Wrap = wdFindStop
  .Font.Bold = True
  .Text = ""
  .Execute
  End With
 Set ArticleSource = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
 ArticleHeader.InsertAfter " (" & ArticleSource & ")"
 Selection.Collapse wdCollapseEnd
 With Selection.Find
  .Forward = True
  .ClearFormatting
  .Wrap = wdFindStop
  .Style = ActiveDocument.Styles(wdStyleHeading2)
  .Text = ""
  .Execute
 End With
Loop

লক্ষ্য নথিতে এটির অনুরূপ লেআউট রয়েছে (বিভাগ এবং নিবন্ধগুলির সংখ্যা পরিবর্তনশীল)। উপরের কোডটিতে আমি যে লাইনগুলি সন্ধান করছি সেগুলি সাহসী:

[2+ খোলার পাঠ্য পৃষ্ঠা এবং টিওসি]

বিভাগ শিরোনাম 1 (স্টাইল: শিরোনাম 1)

নিবন্ধ 1 শিরোনাম (স্টাইল: শিরোনাম 2)
শিরোনাম পাঠ্যের পরিবর্তনীয় লাইন
নিবন্ধ 1 উত্সের নাম ( গা bold়ভাবে) শিরোনাম পাঠ্যের
আরও পরিবর্তনশীল লাইন
নিবন্ধের প্রধান পাঠ্য
পৃষ্ঠা বিরতি

নিবন্ধ 2 শিরোনাম (স্টাইল: শিরোনাম 2)
শিরোনাম পাঠ্যের পরিবর্তনীয় লাইন
নিবন্ধ 2 উত্সের নাম (সাহসী)
শিরোনাম পাঠ্যের আরও পরিবর্তনশীল লাইন
নিবন্ধের বডি পাঠ্য
পৃষ্ঠা বিরতি

বিভাগ শিরোনাম 2 (স্টাইল: শিরোনাম 1)

আর্টিকেল 3 শিরোনাম (স্টাইল: শিরোনাম 2)
শিরোনাম পাঠ্যের পরিবর্তনীয় লাইন
নিবন্ধ 3 উত্সের নাম (সাহসী)
শিরোনাম পাঠ্যের আরও পরিবর্তনশীল লাইন
নিবন্ধের বডি পাঠ্য
পৃষ্ঠা বিরতি

[...]


@ রেয়েস্টাফেরিয়ান মন্তব্যের জন্য ধন্যবাদ - আমার সমস্যাটি হ'ল আমি সিলেকশনটি চালানোর কোনও উপায় খুঁজে পাই না onlyফাইন্ড কমান্ড কেবল চিহ্নিত ব্যাপ্তির মধ্যেই রয়েছে - এটি বর্তমানে সম্পূর্ণ নথিটি সন্ধান করে। আমি গ্লোবাল হিসাবে চিহ্নিত করিনি কারণ আমার প্রাথমিক উদ্দেশ্য ছিল এগুলি একটি একক সাবগুলিতে সংযুক্ত করা। আমি দেখেছি যে ব্যাপ্তিটি একটি নির্বাচন হিসাবে চিহ্নিত করা যেতে পারে, এবং নির্বাচনটি এটির মধ্যেই চলে। তবে আমার কোডটি এর কাজটি সম্পাদন করার জন্য নির্বাচনকে পরিবর্তন করে, আমি বিশ্বাস করি যে এটি কাজ করবে না কারণ নির্বাচনটি হবে পরের লুপটি গোল হয়ে আসলে কি পরিবর্তন হবে?
লোবসোলিটারিও

@ রায়স্টাফেরিয়ান আমি মূলত। নির্বাচন ব্যবহার করছিলাম কারণ আমি কোডের সেই বিভাগটি প্রথমে কাজ করেছি। এটি যদি কাঙ্ক্ষিত ফলাফল অর্জন করে তবে এটি পরিবর্তন করতে কোনও সমস্যা নেই। আমি পাশাপাশি oRng.find ব্যবহার করার চেষ্টা করেছি, তবে মনে হয় এটি একই রকম সমস্যা রয়েছে - অনুসন্ধানটি মূল ওআরএনজি সীমার মধ্যে সীমাবদ্ধ করা হচ্ছে না।
লোবসোলিটারিও

আমি যা করার চেষ্টা করছি তা হল: oRng সংজ্ঞায়িত করুন। ওআরএনগির শুরু থেকে: শিরোনাম 2 সহ প্রথম পাঠ্য সন্ধান করুন। আর্টিকেলহাইডার, বিয়োগের সর্বশেষ অক্ষর পরিসরে যোগ করুন। শৈলী শিরোনাম 2 সহ প্রথম পাঠ্যের শেষে, গা bold় ফন্টের সাথে প্রথম পাঠ্য সন্ধান করুন। পরিচ্ছেদে আর্টসোর্স যোগ করুন, বিয়োগের সর্বশেষ অক্ষর। আর্টিকেলহিডারের পরে আর্টসোর্স সামগ্রীগুলি বন্ধনীগুলির মধ্যে .োকান। নীচের পাঠ্যে এই ক্রমের পুনরাবৃত্তি করুন oRng এর শেষ হওয়া পর্যন্ত। নতুন oRng সংজ্ঞায়িত করুন, আবার ক্রম পুনরাবৃত্তি করুন। আমি যে সমস্যাটি খুঁজে পাচ্ছি তা হ'ল আমি নির্ধারিত ব্যাপ্তিতে চালিত কোনও অনুসন্ধানের সীমাটি নতুন করে সংজ্ঞায়িত করা বলে মনে হচ্ছে?
লোবোসোলিটারিও

হতে পারে আমি সিলেকশনটিকে ওআরএনজি হিসাবে সংজ্ঞায়িত করতে পারি, এবং তারপরে লুপ করার সময় ক্রমশ এটি (বর্তমান অবস্থান, oRng.end) হিসাবে পুনরায় সংজ্ঞা দিতে পারি?
লোবোসোলিটারিও

আমি যা বলতে পারি তা থেকে, P2আপনি orng সেট করতে নির্বাচন ব্যবহার করছেন। আপনি অন্যান্য ব্যাপ্তিগুলি (নিবন্ধ *) সংজ্ঞায়িত করেছেন তবে এটি পি 2-তে প্রদর্শিত হবে না। পি 2 oRngএকটি ব্যাপ্তিতে সেট করে শেষ হয় । হ্যাঁ? তারপরে পি 1 এ আপনি পি 2 এ সংজ্ঞায়িত ব্যাপ্তিগুলি ব্যবহার করেন তবে ব্যবহৃত হয় না এবং কোনওভাবেই ওআরএনজি ব্যবহার করবেন না। আমি পি 1 কলিং পি 2 বা পি 2 কে পি 1 দেখতে পাচ্ছি না।
রায়স্টাফেরিয়ান

উত্তর:


1

আমি হেডার 2 স্টাইলটি ব্যবহার করে ওআরএনজি-তে অনুচ্ছেদগুলি গণনা করে এবং দ্বিতীয় অনুসন্ধানটি ওআরএনজি (নীচের কোড) এর শুরু থেকে যথাযথ সংখ্যায় লুপ করে শেষ পর্যন্ত এটি সমাধান করতে সক্ষম হয়েছি।

আমি একাধিক অনুসন্ধানের সাথে একটি লুপ সীমাবদ্ধ করার অন্য উপায় আছে কিনা তা জানার জন্য আমি এখনও আগ্রহী হব - কেবলমাত্র এটি একটি নির্দিষ্ট পরিসরের মধ্যেই কাজ করে - আমি কেবলমাত্র oRng.Find ব্যবহার করে প্রথম অনুসন্ধান চালাতে চাইছি, শেষ পর্যন্ত ধসে পড়বে , ওআরংকে (বর্তমান অবস্থান, ওরেঞ্জ) হিসাবে পুনরায় সংজ্ঞায়িত করুন এবং চক্রটি সেই পথ দিয়ে ক্রমটি ক্রমশ ছোট হয়ে যাওয়ার সাথে সাথে সন্ধানটি এগিয়ে চলেছে যতক্ষণ না বর্তমান অবস্থান এবং ওরিজেনডের মধ্যে কোনও মিল নেই।

প্রচুর সহায়ক পরামর্শ এবং প্রচুর পরিমাণে ধৈর্য্যের জন্য @ রেস্টাফেরিয়ানকে এক মিলিয়ন ধন্যবাদ!

Sub SourceToArticleHeaders()
'Copy article source to article header
    Dim oRng As Range
    Dim oRngstart As Range
    Dim oRngend As Range
    Dim ArticleSource As Range
    Dim ArticleHeader As Range
    Dim oPara As Paragraph
    Dim A As Long
    A = 0
    Dim excludedTerms(1 To 5) As String
    excludedTerms(1) = "TERM1"
    excludedTerms(2) = "TERM1"
    excludedTerms(3) = "TERM1"
    excludedTerms(4) = "TERM1"
    excludedTerms(5) = "TERM1"

    Selection.HomeKey Unit:=wdStory
    With Selection.Find
    .Forward = True
    .ClearFormatting
    .Wrap = wdFindStop
    .Style = ActiveDocument.Styles(wdStyleHeading1)
    .Text = ""
    .Execute
    End With
    Do While Selection.Find.Found
     For i = 1 To 5
      If InStr(1, Selection.Text, excludedTerms(i), vbTextCompare) Then
      Selection.Collapse wdCollapseEnd
'      MsgBox excludedTerms(i) & " detected - skipping"
      Selection.Find.Execute
      End If
     Next i
     Set oRngstart = Selection.Range
'     MsgBox "Start = " & oRngstart
     Selection.Collapse wdCollapseEnd
     With Selection.Find
      .Forward = True
      .ClearFormatting
      .Wrap = wdFindStop
      .Style = ActiveDocument.Styles(wdStyleHeading1)
      .Text = ""
      .Execute
     End With
     If Selection.Find.Found Then
      Set oRngend = Selection.Range
'      MsgBox "End = " & oRngend
      Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=oRngend.Start)
      Selection.Collapse wdCollapseStart
      Selection.Find.Execute
     Else
'      MsgBox "End = End of Document"
      Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=ActiveDocument.Range.End)
     End If
     For Each oPara In oRng.Paragraphs
      If oPara.Range.Style = ActiveDocument.Styles(wdStyleHeading2) Then
      A = A + 1
      End If
     Next
'     MsgBox A & " articles"
     oRng.Select
     For A = 1 To A
     With Selection.Find
     .Forward = True
     .ClearFormatting
     .Wrap = wdFindStop
     .Style = ActiveDocument.Styles(wdStyleHeading2)
     .Text = ""
     .Execute
     End With
     Set ArticleHeader = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
     Selection.Collapse wdCollapseEnd
     With Selection.Find
      .Forward = True
      .ClearFormatting
      .Wrap = wdFindStop
      .Font.Bold = True
      .Text = ""
      .Execute
     End With
     Set ArticleSource = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
     ArticleHeader.InsertAfter " (" & ArticleSource & ")"
     Selection.Collapse wdCollapseEnd
     Next A
     A = 0
     With Selection.Find
      .Forward = True
      .ClearFormatting
      .Wrap = wdFindStop
      .Style = ActiveDocument.Styles(wdStyleHeading1)
      .Text = ""
      .Execute
     End With
    Loop
End Sub
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.