You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA编译错误:Expected End Sub,批量生成Excel记录求助

解决VBA编译错误:Expected End Sub

嘿,我一眼就看出问题出在哪啦!你遇到的Compile error: Expected End Sub错误,核心原因是你在btnProcessData_Click()这个主过程里面直接嵌套了CallInvoiceNums()和Break_String()两个子过程——VBA根本不允许在一个过程内部定义另一个过程哦!

具体错误点分析

  • VBA的Sub(子过程)和Function(函数)必须是独立的,不能嵌套在其他过程内部。你把两个子过程放在了While循环里,这直接违反了语法规则,编辑器自然会报错。
  • 代码结构混乱:Wend的位置错误,变量声明不完整(比如strDataLine没提前声明),还有变量名不一致(strText_String和text_string)的问题。

修正后的代码示例

按照你的需求(每读取21行生成一条Excel记录),我把代码重新整理成符合VBA语法的结构:

' 主过程:点击按钮触发的处理逻辑
Sub btnProcessData_Click()
    Dim FileNum As Integer
    Dim DataLine As String
    Dim strCallNum As String, strInvoiceNum As String, strText_String As String
    Dim i As Integer
    
    FileNum = FreeFile()
    ' 替换成你的实际文件路径
    Open "C:\YourInputFile.txt" For Input As #FileNum
    
    ' 循环读取文件,直到末尾
    While Not EOF(FileNum)
        ' 调用子过程读取一组数据(这里示例读3行,你要改成21行)
        Call ReadInvoiceNums(FileNum, strCallNum, strInvoiceNum, strText_String)
        
        ' 这里添加生成Excel新记录的逻辑
        ' 比如:Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1,0).Value = strCallNum
        
        ' 调用拆分字符串的子过程
        Call Break_String(strText_String)
    Wend
    
    Close #FileNum
End Sub

' 独立子过程:读取一组数据(可扩展到21行)
Sub ReadInvoiceNums(ByRef FileNum As Integer, ByRef CallNum As String, ByRef InvoiceNum As String, ByRef TextString As String)
    Line Input #FileNum, CallNum
    Line Input #FileNum, InvoiceNum
    Line Input #FileNum, TextString
    ' 如果要读21行,继续添加Line Input语句即可
End Sub

' 独立子过程:拆分字符串并显示
Sub Break_String(text_string As String)
    Dim WrdArray() As String
    Dim i As Integer
    Dim strg As String
    
    WrdArray() = Split(text_string)
    For i = LBound(WrdArray) To UBound(WrdArray)
        strg = strg & vbNewLine & "Part No. " & i & " - " & WrdArray(i)
    Next i
    
    MsgBox strg
End Sub

关键修正说明

  1. 过程独立化:把ReadInvoiceNums(原CallInvoiceNums)和Break_String移到主过程外面,成为独立的子过程。
  2. 参数传递:通过参数传递的方式,让子过程可以读取文件流、共享数据,避免使用全局变量。
  3. 逻辑清晰化:主过程负责整体循环和Excel记录生成,子过程负责单一功能(读数据、拆字符串),符合代码模块化原则。
  4. 语法修正:补全变量声明,统一变量名,确保Wend和While正确配对。

内容的提问来源于stack exchange,提问作者ThelmaG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:20:07