該解決方案假定:人員
- 列表位於表
Sht(1)
在A1:C5
(見圖。 1)
- Org anization Chart在表
Sht(2)
(見圖。2)
(根據需要調整工作表名稱和範圍)
一些在此過程中使用的資源可能是新的用戶,因此它建議您仔細閱讀以下頁面:
Variables & Constants,Excel Objects,With Statement,Range Properties (Excel)
試試這個代碼(參見內它評論):
Option Explicit
Option Base 1 ‘Used at module level to declare the default lower bound for array subscripts.
Sub OrgChr_Update()
Rem Always declare all variables
Dim Wsh1 As Worksheet, Wsh2 As Worksheet
Dim aNames As Variant
Dim rCllFnd As Range
Dim l As Long
Dim lLstRow As Long
Dim sFnd1st As String
Rem Set Worksheets
With ThisWorkbook ‘Assumes procedure resides in same workbook, thus the use of ThisWorkbook instead of ActiveWorkbook
Set Wsh1 = .Sheets("Sht(1)")
Set Wsh2 = .Sheets("Sht(2)")
End With
Rem Get List of Names
With Wsh1.Columns(1)
‘Used to find last row with values, then to define the range with the Names, Titles & Codes
lLstRow = .Find(What:="*", _
After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False, SearchFormat:=False).Row
aNames = Range(.Cells(2), .Cells(lLstRow)).Resize(, 3).Value2 ‘Set List with Names, Titles & Codes as Array
End With
Rem Search for Names in Wsh2
With Wsh2.UsedRange
Rem To Delete All Comments
.Cells.ClearComments 'Use this line if only comments related to Org. Chart Names exist in Wsh2
For l = 1 To UBound(aNames)
Rem Search for Whole matches (adjust to xlPart if required)
Set rCllFnd = .Find(What:=aNames(l, 1), _
After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False, SearchFormat:=False)
Rem Validate Search Results
If Not (rCllFnd Is Nothing) Then
Rem Set address of first match found use later to validate completeness
sFnd1st = rCllFnd.Address
Rem Run action with cell found & reiterate search
Do
Rem Update Cell Comment as New
With rCllFnd
Rem Add Comment
Rem .ClearComments 'Use this line if there will be other comments not related to Org. Chart Names in Wsh2
.AddComment
.Comment.Visible = True
.Comment.Text Text:=aNames(l, 2) & vbLf & aNames(l, 3)
End With
Rem Find next match
Set rCllFnd = .FindNext(After:=rCllFnd)
Rem Validate Search completness
Loop While rCllFnd.Address <> sFnd1st
End If: Next: End With
End Sub
圖1
圖2
來源
2015-10-21 21:16:14
EEM
的可能的複製[如何避免。在Excel VBA宏中使用選擇s](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) –
你的實際問題是什麼?您沒有顯示任何代碼,只列出了一系列要求。 SO不是代碼寫入服務。發佈您當前使用的代碼,並且特別描述該代碼是如何*不*按照您期望的那樣做的... –