Excel VBA宏查找和格式

时间:2013-02-08 21:21:49

标签: excel vba find format

我正在尝试创建一个可以在标头中找到特定字符串的宏,然后格式化该列中的单元格。例如,我有一个名为“购买日期”,“上限日期”和“过期日期”的标题。我希望能够找到使用的“Date”的第一个实例,将它们格式化为文本,然后找到下一个出现和格式等。

我创建了一个只找到第一个实例,然后再找不到的实例。任何的想法?我查找了“查找”和“之后”,但无法让它们正常运行。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我也在努力超越第一个发现。在Do While下面的代码的最后一部分。也许你可以用它来做点什么。

Sub HyperLinking()     
  Call HyperLink("Text TO Hyperlink", "C:\Document.docx")   
End Sub 

Private Function HyperLink(LinkName As String, LinkAddress As String) 
  Dim WDApp As Object, wd As Object, rn As Long 
  On Error Resume Next 
  Set WDApp = GetObject(, "Word.Application") 
  If Err.Number <> 0 Then 
      Set WDApp = CreateObject("Word.Application") 
  End If 
  On Error Goto 0 
  Set wd = WDApp.Documents.Open(LinkAddress) 
  WDApp.Visible = True 
  Set objWdRange = wd.Content      
  objWdRange.Find.ClearFormatting 
  With objWdRange.Find 
      .Text = LinkName 
      .Forward = True 
      .Wrap = wdFindContinue 
  End With 
  Do While objWdRange.Find.Execute = True 
      objWdRange.Hyperlinks.Add Anchor:=objWdRange, Address:=LinkAddress, SubAddress:="", ScreenTip:="Linked  Document", TextToDisplay:=LinkName 
      objWdRange.Find.Execute 
  Loop      
  wd.Save 
  wd.Close 
  Set wd = Nothing 
  Set WDApp = Nothing      
End Function

有一个问题是,有时候,我认为由于格式化,找不到所有单词。也许有人可以帮助解决为什么会这样?

您可以根据自己的要求调整此代码。

答案 1 :(得分:0)

它不是特别优雅,但这很可能会为你做到。只需编辑一些硬编码值,如sheetname,并确保您没有超过99列或999行。

Public Sub FormatRowsInDateColumns()
Dim header As String

Worksheets("Sheet1").Activate

'loop through columns
For col = 1 To 99

    'check if header cell contains word date
    header = Cells(1, col).Value
    If InStr(1, header, "date", vbTextCompare) <> 0 Then

        'convert cell values to string
        For Row = 1 To 999
            'Formats value and perserves as text with an apostrophe
            Cells(Row, col).Value = "'" & Format(Cells(Row, col).Value, "yyyy/mm/dd")
        Next Row

        'set column format as text
        Columns(col).NumberFormat = "@"
    End If
Next col

End Sub