iT邦幫忙

0

vba巢狀if問題

各位前輩好,
我有個總表,裡面有其他工作表的簡述
我想要用一個巨集, 就是當我在總表更新的時候
就能複製另一個blank的工作表,並且將工作表名稱根據我總表裏所更新的儲存格內容命名
並在這之前要先判斷工作表示是否已存在,若存在就不新增
但我的總表有點麻煩,就是我要根據改變的欄位只有C欄,
但儲存格若是斜體以及為空白儲存格的話,就不新增工作表
於是我寫了以下巢狀的語法。
出現的問題就是:
執行完巨集了也沒有出現error,
但是他並沒有把我寫的If Cells(i, "C").Font.FontStyle = "標準"這句判斷出來
斜體的儲存格一樣被新增了....
實在不知道出了什麼錯

Sub 批次新增工作表()
    '先把現存sheet弄成一個array
    Dim shtName As String
    For Each sht In Sheets
        shtName = shtName & "/" & sht.Name
    Next
    shtName = Mid(shtName, 2)
    shtArray = Split(shtName, "/")
    
    '用迴圈設定一個範圍
    For i = 2 To 79
        x = Sheets("總表").Cells(i, "C")
        '先判斷sheet是否存在,沒有再新增
        a = Application.Match(x, shtArray, 0)
        If IsError(a) Then
            If Cells(i, "C").Font.FontStyle = "標準" Then
                If x <> "" Then
                    Sheets("Blank").Copy Before:=Sheets("Blank")
                    ActiveSheet.Name = x
                End If
            End If
        End If
    Next i
End Sub
 

1 個回答

0
paicheng0111
iT邦高手 1 級 ‧ 2019-11-05 18:09:59
最佳解答

試試看用Range.font.Italic屬性檢查是否為斜體。

Sub 批次新增工作表()
    '先把現存sheet弄成一個array
    Dim shtName As String, c As Range, rng As Range
    For Each sht In Sheets
        shtName = shtName & "/" & sht.Name
    Next
    shtName = Mid(shtName, 2)
    shtArray = Split(shtName, "/")
    
    '用迴圈設定一個範圍
    Set rng = Range(Sheets("總表").Cells(2, "C"), Sheets("總表").Cells(79,"C"))
    For Each c in rng
        '先判斷sheet是否存在,沒有再新增
        a = Application.Match(c.Value, shtArray, 0)
        If IsError(a) Then
            If c.value <> "" And not c.font.Italic Then
                Sheets("Blank").Copy Before:=Sheets("Blank")
                ActiveSheet.Name = c.value
            End If
        End If
    Next c
End Sub
vicky7933 iT邦新手 5 級 ‧ 2019-11-05 21:18:18 檢舉

成功解決了, 太感謝!!!
原來還是不能懶惰, 變數屬性該宣告的還是得宣告, 才能用屬性去做if判斷!多謝

我要發表回答

立即登入回答