2016-08-15 52 views
0

在我繼續尋求爲工作地點組織一個隨時調度的工作中更輕鬆的工作時,我又碰到了另一個roadbump。如何用Excel中的循環中的列表中的名稱替換單元格中的數字VBA

我真是很大幫助安排一個編號計劃,看起來像在此之前:

Picture of numbered schedule

每個這些數字對應於一個特定的名字在名單上的綠色名爲「個人」的權利。

現在我想用循環將這些數字替換爲綠色列表中的名稱。

我試圖做它像這樣,通過選擇具有數字的單元格的範圍,然後做出一個循環,在列表中的名稱,以取代所有的個人數字:

Sub FindReplaceAllTest(numOfEmployees As Integer) 

Dim sht As Worksheet 
Dim fnd As Integer 
Dim rplc As Variant 

fnd = 1 
rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value 

For Each sht In ActiveWorkbook.Worksheets 

    Range("B2:F54").Select 
    Selection.Replace What:=fnd, replacement:=rplc, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _ 
     SearchFormat:=False, ReplaceFormat:=False 

    If fnd < numOfEmployees Then 
     fnd = fnd + 1 
    ElseIf fnd = numOfEmployees Then 
     fnd = 0 
    End If 

Next sht 

End Sub 

變量numOfEmployees聚集在一個較早的SUB,其中綠色列表中的名稱被計入並傳遞到此變量中,這是爲了創建編號列表的過程。

不幸的是,它不會產生預期的結果。我在該行得到錯誤「1004」:

rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, fnd + 1").Value 

這似乎是在該行的fnd變量引起的。當我拿出fnd並用常規的行引用替換它,我得到的結果是這樣的:

"Fnd" switched out for "2": "rplc = ThisWorkbook.Sheets("Duty Roster").Cells("17, 2").Value"

即使我把「2」的行中我仍然得到列表的名稱作爲替補。

回答

0

正確sintax是以下

RPLC = ThisWorkbook.Sheets( 「輪值」)。將細胞(17,FND + 1)。價值

這將讓你的細胞在列中的值「fnd + 1」和第17行

此外,你循環遍歷表,但從來沒有實際使用它們,因爲你既不使用「sht」,也不用前綴帶有「dot」的任何range對象來將其引用到「裁決」sht 。就像如下:

對於每短噸在ActiveWorkbook.Worksheets

sht.Range("B2:F54").Replace What:=fnd, replacement:=rplc, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, _ 
    SearchFormat:=False, ReplaceFormat:=False 
+0

謝謝!用你的指針,我發現了我真正想說的和做的!我改變了我的代碼,看起來像這樣提供了所需的結果(請查看下面的內容,我將它列在一個新條目中)。 –

+0

不客氣。很高興有幫助 – user3598756

0

從這個出發:

Schedule before numbers been replaced by the green list of employees

此代碼:

Sub FindReplaceAllTest(numOfEmployees As Integer) 

Dim n As Integer 
Dim fnd As Integer 
Dim rplc As String 

fnd = 1 

    Do Until n = numOfEmployees + 1 

     rplc = ThisWorkbook.Sheets("Duty Roster").Cells(fnd + 1, 17).Value 

     Range("B2:F54").Select 
     Selection.Replace What:=fnd, replacement:=rplc, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False,_ 
     SearchFormat:=False, ReplaceFormat:=False 

     n = n + 1 
     fnd = fnd + 1 
    Loop 

End Sub 

產生的這些結果:

Schedule after numbers been replaced by the green list of employees

非常感謝user3598756爲我提供了我需要解決的問題!她/他指出我在寫代碼時並不需要,因此我用Do Until Loop交換了我的For Each Loop,並用n替換了sht變量(並根據我的需要重寫了它們)以使其工作。他還讓我意識到,我混合了列/行引用的位置。編輯完成後,我的代碼開始生成我想要的結果。

那現在我的代碼確實是可變n比較變量numOfEmployees + 1,以確保循環停止時n>比numOfEmployees。確保包含所有數字。此外,循環在我指定的範圍內查找fnd,並用變量rplc中找到的單元格中的值切換出該數字的所有實例。

這就是我的(我希望是正確的,我對此很新)簡化的回答。

非常感謝幫助!

相關問題