2014-09-23 47 views
-1

我想在MS Word 2010中編號列表中的項目洗牌。這個問題的背景是,我的妻子是一位英語老師,她使用Word進行測試。每當她進行測試時,她還會通過更改編號列表中項目的順序來製作第二個版本。Word 2010 BA洗牌編號列表

我期待之一:

  • 變化編號列表中的項目,我選擇使用鼠標,即順序選擇編號列表,按下一個按鈕/快捷方式,並將列表洗牌 或
  • 更改測試中所有編號列表的順序,即宏查找新編號列表的開頭,選擇列表中的所有項目,更改項目順序,然後移至下一個編號列表。

所有列表在使用代碼後應保持相同的格式(即起始編號)。

我嘗試了第一個實例,但沒有成功確定我選擇的開始和結束行號。

例子:

原文:

=====開始:======

問題1回答什麼是正確的?

  1. 回答
  2. 應答b
  3. 答案C

問題2回答什麼是正確的?

  1. 答案d
  2. 回答Ë
  3. 回答˚F

問題3回答什麼是正確的?

  1. 回答ģ
  2. 回答ħ
  3. 回答Ĵ

======結束========

宏應該創建這樣的:

======開始========

問題1什麼答案是正確的?

  1. 答案C
  2. 回答
  3. 應答b

問題2回答什麼是正確的?

  1. 回答˚F
  2. 回答Ë
  3. 答案d

問題3回答什麼是正確的?

  1. 解答^ h
  2. 回答Ĵ
  3. 答摹

====結束======

+0

''我正在尋找一個宏「'我會推薦一個自由職業者的網站,你可以支付給公平的市場價格的人。 SO是**不是**代碼寫入服務。 '給我一個c0dez'永遠不是話題。另外;請告訴我們您已經嘗試了什麼,相關代碼以及您遇到的具體**問題。閱讀[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)並查看[help center](http://stackoverflow.com/help)在這。然後[編輯](http://stackoverflow.com/posts/25989326/edit)你的問題,並提供所有必要的細節。 – RossC 2014-09-23 08:37:43

回答

0

因爲你面對的只有3個列表項,它很容易。只需交換這兩個項目中的任何一個。下面的代碼也是一樣的。

對於超過3個項目,您可能需要重複交換更多行的邏輯。但是你應該從這段代碼中得到關於如何去解決它的基本想法。

Sub Shuffle() 
    Dim li As List, rng As Range, random As Integer 

    Randomize 
    For Each li In ThisDocument.Lists 
     ' get either 1 or 2. We will swap this with the 3rd item 
     random = CInt(Rnd + 1) 

     ' add a new paragraph as temporary place holder. This is so that we can keep the paragraph with its formatting intact. 
     Set rng = li.Range.Paragraphs.Add.Range 
     rng.FormattedText = li.Range.Paragraphs(random).Range.FormattedText 

     ' swap the items 
     li.Range.Paragraphs(random).Range.FormattedText = li.Range.Paragraphs(3).Range.FormattedText 
     li.Range.Paragraphs(3).Range.FormattedText = rng.FormattedText 

     ' remove the temporary paragraph we added 
     li.Range.Paragraphs.Last.Range.Delete 
    Next 
End Sub 
+1

嗨Pradeep,非常感謝這段代碼。它的作用像一個魅力,除了每個任務不知道的項目數量是未知的。我在你的代碼中使用了li.CountNumberedItems來解決這個問題。 – 2014-09-24 09:00:57

0

我稍微普拉迪普庫馬爾修改了代碼,這就像一個魅力,即使有數目不詳的每編號列表,以便它可以在normal.dot模板被納入項目:

Sub Shuffle() 

Dim li As List, rng As Range, random As Integer, nbr As Integer 
Application.ScreenUpdating = False 
Randomize 
For Each li In ActiveDocument.Lists 
    nbr = li.CountNumberedItems 
    ' Run along all items in list and swap with a random one from the same list 
    For a_counter = 1 To nbr 
     ' Make sure the item is not swapped with itself, that would fail  
     again: 
      random = CInt((nbr - 1) * Rnd + 1) 
     If random = a_counter Then GoTo again 

     ' add a new paragraph as temporary place holder. This is so that we can keep the paragraph with its formatting intact. 
     Set rng = li.Range.Paragraphs.Add.Range 
     rng.FormattedText = li.Range.Paragraphs(random).Range.FormattedText 

     ' swap the items 
     li.Range.Paragraphs(random).Range.FormattedText = li.Range.Paragraphs(a_counter).Range.FormattedText 
     li.Range.Paragraphs(a_counter).Range.FormattedText = li.Range.Paragraphs(nbr + 1).Range.FormattedText 

     ' remove the temporary paragraph we added 
     li.Range.Paragraphs(nbr + 1).Range.Delete 
    Next a_counter 
Next 
Application.ScreenUpdating = True 
End Sub