Mình mới lập trình excel gặp cái lỗi này chưa biết sửa như thế nào.
Nhờ mọi người giúp đỡ !
Nó báo lỗi compile đối với câu lệnh "For" ạ:
For bitRowCnt = regStartRow To regEndRow
...
Next bitRowCnt
Nhờ mọi người giúp đỡ !
PHP:
Option Explicit
Sub regDefine()
' register definition string has form as follow: #define PWD_CTL (_UW*) (TOPREG_BASE_ADDR + 0x0000)
' register mask string has form as follow: #define PWD_CTL_MASK (UW) 0x00007FFF
Const regNameCol = 2
Const regOffsetCol = 3
Const regTypeCol = 4
Const bitNumCol = 5
Const bitNameCol = 6
Const bitTypeCol = 7
Const regBaseAddr = "TOPREG_BASE_ADDR"
Const regCntMax = 2601
Dim regDefStr As String
Dim regMskStr As String
Dim regName As String
Dim regOffset As String
Dim regMsk As String
Dim bitNum As String
Dim bitName As String
Dim bitType As String
Dim bitMskArray(0 To 31) As String
Dim regCnt As Integer
Dim regStartRow As Integer
Dim regEndRow As Integer
Dim bitRowCnt As Integer
Dim bitStart As Integer ' start bit of bit field
Dim bitEnd As Integer ' end bit of bit field
Dim bitOrder As Integer
Dim Fpath As String
Dim Fname As String
Dim i As Integer
'-----------------------------------------------------------------------------------
' Write regDefStr and regMskStr to *.h file
Fname = "TOPREG_reg_map"
Fpath = Application.ActiveWorkbook.Path
Fpath = Fpath & "\" & Fname & ".h"
Sheets("TOPREG_reg_map").Select
regCnt = 30
Do While regCnt < regCntMax
Do Until (Cells(regCnt, regNameCol) <> "") Or (regCnt >= regCntMax)
If Cells(regCnt, regTypeCol) = "R/W" Then ' R/W register
If Cells(regCnt, regOffsetCol) = "" Then
MsgBox "Offset is not exist"
Else
' create register definition string
regName = Cells(regCnt, regNameCol)
regOffset = Cells(regCnt, regOffsetCol)
regDefStr = "#define " + regName + String(6, vbTab) + "(_UW*) (" + regBaseAddr + " + " + regOffset + ")"
' create register mask string
regMskStr = "#define " + regName + "_MSK" + String(4, vbTab)
regStartRow = regCnt
' Determine end row of current register
regEndRow = regStartRow
Do Until (Cells(regEndRow + 1, regNameCol) <> "") Or (regEndRow >= regCntMax)
regEndRow = regEndRow + 1
Loop
' check bits of current register to build mask
For i = 0 To 31
bitMskArray(i) = "0" ' Init bit mask
Next i
For bitRowCnt = regStartRow To regEndRow
bitNum = Cells(bitRowCnt, bitNumCol)
bitName = Cells(bitRowCnt, bitNameCol)
bitType = Cells(bitRowCnt, bitTypeCol)
If InStr(bitNum, ";") = 0 Then
' single bit field [x]
bitStart = Mid(bitNum, 2, Len(bitNum) - 2)
bitEnd = bitStart
Else
' multiple bits field [x:y]
bitStart = Mid(bitNum, 2, InStr(bitNum, ":") - 2)
bitEnd = Mid(bitNum, InStr(bitNum, ":") + 1, Len(bitNum) - InStr(bitNum, ":") - 1)
End
If (UCase(bitName) = "RESERVE") Or (bitType <> "R/W") Then
' mask bit = 0
For bitOrder = bitStart To bitEnd
bitMskArray(bitOrder) = "0"
Next bitOrder
Else
' mask bit = 1
For bitOrder = bitStart To bitEnd
bitMskArray(bitOrder) = "1"
Next bitOrder
End
Next bitRowCnt
' Create register mask from bit mask array
regMsk = "0x"
For i = 31 To 0 Step -4
regMsk = regMsk + hexFrom4Bits(bitMskArray(i), bitMskArray(i - 1), bitMskArray(i - 2), bitMskArray(i - 3))
Next
regMskStr = regMskStr + regMsk
' Write to file
regName = printToFile(regDefStr, regMskStr, Fpath)
regCnt = regEndRow + 1
End
Else
regCnt = regCnt + 1
End
Loop
Loop
End Sub
Function printToFile(regDef As String, regMsk As String, filePath As String) As String
Open filePath For Append As #1
Print #1, regDef
Print #1, regMsk
Print #1, vbCrLf
Close #1
printToFile = ""
End Function
Function hexFrom4Bits(bit3 As String, bit2 As String, bit1 As String, bit0 As String) As String
Dim fourBits As String
Dim result As String
fourBits = bit3 + bit2 + bit1 + bit0
Select Case fourBits
Case "0000"
result = "0"
Case "0001"
result = "1"
Case "0010"
result = "2"
Case "0011"
result = "3"
Case "0100"
result = "4"
Case "0101"
result = "5"
Case "0110"
result = "6"
Case "0111"
result = "7"
Case "1000"
result = "8"
Case "1001"
result = "9"
Case "1010"
result = "A"
Case "1011"
result = "B"
Case "1100"
result = "C"
Case "1101"
result = "D"
Case "1110"
result = "E"
Case "1111"
result = "F"
End Select
hexFrom4Bits = result
End Function
Nó báo lỗi compile đối với câu lệnh "For" ạ:
For bitRowCnt = regStartRow To regEndRow
...
Next bitRowCnt



