[英]VBA - Check if a cell's content is bold
我目前正在嘗試使用VBA在Excel中創建日歷。
現在,我需要檢查B列中的單元格是否設置為粗體。 由於格式化為粗體的行可以更改其位置,因此我需要檢查B列中的每個單元格(如果其內容為粗體)。
我當前的代碼:
Sub ScanBlock1()
Dim Zelle As Integer
Dim Cell As String
Dim found As Integer
Zelle = 7
Zell = "B" & Zelle
found = 0
'CopyCat.OpenCopyCat
Windows("Preset.xlsm").Activate
Do While found = 0
Windows("Preset.xlsm").Activate
Range(Zell).Select
If Range(Zell).Font.Bold Then
'Save start and end for copycat
found = 1
Else
Zelle = Zelle + 2
End If
Loop
End Sub
嘗試此操作時,我遇到了多個問題。
我遇到的第一個問題是,Excel不會自動激活請求的窗口。 我不知道為什么 它一直在其他項目中工作。
第二個問題:我的IF
語句中總是出現溢出錯誤。 我認為這是由於Excel未激活我請求的窗口引起的。
編輯:因為許多人已經寫過這是一個溢出錯誤,因為沒有找到任何粗體,我想打開/選擇的窗口是“已滿”的粗體單元。
您已將Zelle定義為整數,最大可能為32767,而Excel具有大約一百萬行。 快速解決方案是更改聲明:
Dim Zelle As Integer
但是可能需要很長時間才能運行此宏。 您應該將其限制為UsedRange並使用對象循環。 喜歡:
Dim cl as Range
For each cl in Workbooks("Preset.xlsm").Worksheets(1).UsedRange
If Range(Zell).Font.Bold Then
'Do something
End If
Next cl
這將適用於Preset.xlsm的第一張紙,但是您當然可以指定其他紙。
@comment下面:為什么要遍歷UsedRange中的所有單元格? OP僅需要B列。
好吧,這樣會更快:
For each cl in Workbooks("Preset.xlsm").Worksheets(1).UsedRange.Columns(2)
嘗試這個:
Zelle = 7
zMAX=1000
found = 0
Windows("Preset.xlsm").Activate
if Err.Number <> 0 then goto errorlabel ' process error
Do While found = 0 or Zelle < zMAX
Zell = "B" & Zelle
If Range(Zell).Font.Bold Then
'Save start and end for copycat
found = 1
Else
Zelle = Zelle + 2
End If
Loop
If Zelle >= zMAX then
Msgbox "Problem!"
Endif
我個人比較喜歡直接使用單元格引用而不是打擾字符串,因此這里是一個替代解決方案:
zMAX=1000
Windows("Preset.xlsm").Activate
if Err.Number <> 0 then goto errorlabel ' process error
for Zelle = 7 to zMAX Step 2
If Cells(Zelle, 2).Font.Bold Then Exit For ' "2" for column "B"
Next
If Zelle >= zMAX then
Msgbox "Problem!"
Else
' Bold found, Save start and end for copycat
Endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.