【发布时间】:2021-10-02 05:28:44
【问题描述】:
我想使用下面的代码,而不必在公共子函数中的 Sheets("Sheet1").Activate 中写出工作表名称,因此我只需单击工作表并运行代码。我不熟悉 VBA 语言,这应该是一个简单的修复,但是经过一个小时的尝试,我无法让它工作,所以我现在在这里问。此外,当我删除 Sheets("Sheet1").Activate 时,缩写表将被激活,因此该函数不会在该表上运行,而不是在我想要的表上运行。任何帮助将不胜感激!
Public gcolWords As New Collection
Public Sub ReplaceAllWrds()
Dim vWord, vAbv, itm
Dim i As Integer
Dim Lastrow As Integer
LoadAbbrevs
Sheets("Sheet1").Activate
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range("F" & Lastrow).Select
For Each itm In gcolWords
i = InStr(itm, ":")
vWord = Left(itm, i - 1)
vAbv = Mid(itm, i + 1)
Replace1Wrd vWord, vAbv
Next
Set gcolWords = Nothing
End Sub
Private Sub Replace1Wrd(ByVal pvWrd, pvAbv)
On Error Resume Next
Selection.Replace What:=pvWrd, Replacement:=pvAbv, LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub
Private Sub LoadAbbrevs()
Dim vWord, vAbv, vItm
Sheets("abbrevs").Activate
Range("A2").Select
While ActiveCell.Value <> ""
vWord = ActiveCell.Offset(0, 0).Value
vAbv = ActiveCell.Offset(0, 1).Value
vItm = vWord & ":" & vAbv
gcolWords.Add vItm
ActiveCell.Offset(1, 0).Select 'next row
Wend
End Sub
【问题讨论】: