VBA:i = i + 1计数器无法正常工作

时间:2017-02-22 13:13:37

标签: vba counter

我正在VBA尝试创建一个宏,在不同的单元格中记录工作簿打开的次数。每次打开时,它都会创建一个带有开口编号的新单元格。所以我为此创建了一个计数器。

   Option Explicit 

   Dim i As Integer  

   Private Sub Workbook_Open() 
     If i = "" Then 
       i = 1 
     End If  

     ThisWorkbook.Worksheets("Feuil1").Cells(i, 1).Value = "Session " & i  
     i = i + 1
     Debug.Print i  
   End Sub

然而,声明如果i =“”仍然以黄色突出显示,我不明白为什么...... 有人会有解决方案吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

iInteger,因此与空String的比较无效。

你最接近的事情是

If i = 0 Then

但是,如果您希望在保存工作簿时将i的值保留为,则最简单的方法是从工作簿中读取其值。

答案 1 :(得分:0)

当然,您无法将字符串分配给整数。这是type mismatch错误。

您需要的是获取列中的最后一个单元格然后递增它。

Private Sub Workbook_Open()
    ' Fetch the last cell from column 1
    Dim r As Range
    With ThisWorkbook.Worksheets("Feuil1")
        Set r = .Cells(.Rows.Count, 1).End(xlUp)
    End With

    ' Get the last session number, or 0 if not present or doesn't match
    Dim lastSession As Long: lastSession = 0
    If Not IsEmpty(r) Then
        Dim p As Long: p = InStr(1, Trim(r.value), "Session ")
        If p = 1 Then
            lastSession = CLng(Mid(r.value, p + Len("Session "), 10000))
        End If
    End If
    r.Offset(1).value = "Session " & (lastSession + 1)
End Sub

答案 2 :(得分:0)

我喜欢以下

Private Sub Workbook_Open()
    With Worksheets("Feuil1")
        With .Cells(.Rows.Count, 1).End(xlUp)
            .Offset(1) = "Session " & Val(Replace(.Value, "Session ", "")) + 1
        End With
    End With
End Sub