我想使用word作为前端用户表单附加数据,并在单击提交按钮时将数据导出到特定的csv文件。
首先我需要知道哪一行应该追加数据。以下是代码,我收到了nrow = rng1.UsedRange.Rows.Count
行
'Reference - Microsoft Excel 12.0 Object library 12
'Word
Global objDoc As word.Document
Global docName As String
Global docPath As String
Global docFullName As String
'Workbook
Global objWb As Excel.Workbook
Global objWs As Excel.Worksheet
Global rng1 As Range
Global nrow As Integer
'Global objWord As word.Application
Public Sub Initial_Global()
'Word
Set objDoc = ActiveDocument
docName = objDoc.Name
docPath = objDoc.Path
docFullName = objDoc.FullName
'Excel
Set objWb = Workbooks.Open(FileName:="C:\Users\1502911\Desktop\Database1.csv")
Set objWs = objWb.Worksheets("Database1")
Set rng1 = objWs.Range("A1")
nrow = rng1.UsedRange.Rows.Count
MsgBox nrow
End Sub
答案 0 :(得分:1)
nrow = rng1.UsedRange.Rows.Count
这意味着:
Worksheets("Database1").Range("A1").UsedRange.Rows.Count 'wrong
当然它会返回错误,因为你询问范围的使用范围" A1"
必须是这样的:
Worksheets("Database1").UsedRange.Rows.Count
所以在你的代码中,如果你只需要计算列的使用范围内的行" A"必须是下一个:
nrow = objWs.UsedRange.Columns(1).Rows.Count
但是要小心这种获取工作表中最后一行的方法,当使用的范围不是从第一行开始时,问题就会出现问题,例如:如果第一行是空的,那么你将收到的数量少于预期。在这种情况下使用此方法:
nrow = objWs.Cells(Rows.Count, 1).End(xlUp).Row
也可能是问题,例如列" A"中使用过的单元格数由于某些原因而不是列中所用细胞的数量" B"或" D"等你需要得到最后一个未使用的行,在这种情况下你需要这个方法:
Dim ocell As Range
For Each ocell In objWs.UsedRange
nrow = ocell.Row
Next
MsgBox nrow