embedded到Excel表格中时,函数不起作用

为什么下面的代码在Excel工作表中不起作用? 该代码基于用户select将文本文件隐藏到excel文件中,select可以导出完整的excel表格或选定范围,用户也可以select文本文件的分隔符。 我已经在Excel表单中testing了这个代码,并且它工作的很好,但是如果把用户表单修改为embedded在Excel表格中,它就不能完全工作。 它确实生成文本文件,但所有的价值都是空白的,任何想法?

Public Sub ExportToTextFile(FName As String, SourceFile As String, _ Sep As String, SelectionOnly As Boolean, _ AppendData As Boolean) Dim wb As Workbook Dim ws As Worksheet Dim WholeLine As String Dim FNum As Integer Dim RowNdx As Long Dim ColNdx As Integer Dim StartRow As Long Dim EndRow As Long Dim StartCol As Integer Dim EndCol As Integer Dim CellValue As String StarRange = StrCol & StrRow EndRange = EndCols & endrows Application.ScreenUpdating = False On Error GoTo EndMacro: FNum = FreeFile Set wb = Workbooks.Open(SourceFile) Set ws = wb.Sheets("Sheet1") If SelectionOnly = True Then With ActiveSheet.UsedRange StartRow = .Cells(1).Row StartCol = .Cells(1).Column EndRow = .Cells(.Cells.Count).Row EndCol = .Cells(.Cells.Count).Column End With Else With ActiveSheet.Range(StarRange & ":" & EndRange) StartRow = .Cells(1).Row StartCol = .Cells(1).Column EndRow = .Cells(.Cells.Count).Row EndCol = .Cells(.Cells.Count).Column End With End If If AppendData = True Then Open FName For Append Access Write As #FNum Else Open FName For Output Access Write As #FNum End If For RowNdx = StartRow To EndRow WholeLine = "" For ColNdx = StartCol To EndCol If Cells(RowNdx, ColNdx).Value = "" Then CellValue = Chr(34) & Chr(34) Else CellValue = Cells(RowNdx, ColNdx).Value End If WholeLine = WholeLine & CellValue & Sep Next ColNdx WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep)) Print #FNum, WholeLine Next RowNdx EndMacro: On Error GoTo 0 Application.ScreenUpdating = True Close #FNum MsgBox "Completed.", vbInformation ActiveWorkbook.Close End Sub 

看你的代码:

 Dim StartRow As Long Dim EndRow As Long Dim StartCol As Integer Dim EndCol As Integer Dim CellValue As String StarRange = StrCol & StrRow EndRange = EndCols & endrows 

我怀疑你的variables名有一些拼写错误。 例如,它是StartRow还是StrRow

如果不使用细齿梳来进行debugging,我会强烈build议您始终使用

 Option Explicit 

在每个模块的开始。 这告诉VBA“不要让我使用任何我没有明确声明的variables” – 这在实践中意味着(大部分时间)“如果我拼错了variables,就会警告我”。

我也注意到你设置了一个variablesws

 Set ws = wb.Sheets("Sheet1") 

然后继续不使用它。 波特兰亚军对于如何使用这样一个variables提出了一个很好的build议 – 虽然没有看到你的代码/表单的其余部分,但是目前还不清楚这样做是否对你有更好的工作。 通常“ActiveSheet”是一个坏主意 – 它通常是录制macros的遗留物,但不是最有效或便携的事情。

它看起来像你从几个不同的地方代码,并重新使用它。 我build议你一行一行,并确保每一行都是必需的,并做你想做的事情。

最后,作为debugging过程的一部分,我会在行中放置一个断点(F9)

 WholeLine = "" 

然后逐步查看是否按照自己的想法形成了线条(input范围是正确的,格式是正确的,线条是否正确写入)。 我的怀疑在于你定义input范围的方式。 StartRowStartCol等实际上是你想要他们是什么?

最后(也可能是最重要的)在行中

 For ColNdx = StartCol To EndCol If Cells(RowNdx, ColNdx).Value = "" Then CellValue = Chr(34) & Chr(34) Else CellValue = Cells(RowNdx, ColNdx).Value End If WholeLine = WholeLine & CellValue & Sep Next ColNdx 

您引用Cells – 但不引用这些单元格所属的工作簿/表单。 我怀疑VBA引用的是差异表单比你想要的。 再次 – 如果你正确地创build了wsvariables,那么这些行应该改为

 For ColNdx = StartCol To EndCol If ws.Cells(RowNdx, ColNdx).Value = "" Then CellValue = Chr(34) & Chr(34) Else CellValue = ws,Cells(RowNdx, ColNdx).Value End If WholeLine = WholeLine & CellValue & Sep Next ColNdx 

这可能很好地解决你的问题。