【发布时间】:2018-04-28 11:39:23
【问题描述】:
我有以下代码:
Private Sub UpdateButton_Click()
Dim uniqueID As Integer
uniqueID = 0
Dim notInOrder As Boolean
notInOrder = False
Dim inOrder As Boolean
inOrder = False
Dim employeeNumber As String
Dim week As Integer
Dim tdate As Date
tdate = Now
Dim qtyWelds As Integer
qtyWelds = 26
Dim totalOfWeldsInOrder As Integer
totalOfWeldsInOrder = 0
Dim qtyGridsInspected As Integer
qtyGridsInspected = 1
Dim s1 As Integer
Dim s2 As Integer
Dim s3 As Integer
Dim s4 As Integer
Dim s5 As Integer
Dim s6 As Integer
Dim s7 As Integer
Dim s8 As Integer
Dim s9 As Integer
Dim s10 As Integer
Dim s11 As Integer
Dim s12 As Integer
Dim s13 As Integer
Dim s14 As Integer
Dim s15 As Integer
Dim s16 As Integer
Dim s17 As Integer
Dim s18 As Integer
Dim s19 As Integer
Dim s20 As Integer
Dim s21 As Integer
Dim s22 As Integer
Dim s23 As Integer
Dim s24 As Integer
Dim s25 As Integer
Dim s26 As Integer
If ThisWorkbook.Worksheets(2).Shapes("cBox1").OLEFormat.Object.Value = 0 Then
totalOfWeldsInOrder = totalOfWeldsInOrder + 1
s1 = 0
notInOrder = True
End If
.....
If ThisWorkbook.Worksheets(2).Shapes("cBox26").OLEFormat.Object.Value = 0 Then
totalOfWeldsInOrder = totalOfWeldsInOrder + 1
s26 = 0
notInOrder = True
End If
Dim sInOrder As Integer
If inOrder = True Then
sInOrder = 1
Else
sInOder = 0
End If
Dim snotInOrder As Integer
If notInOrder = True Then
snotInOrder = 1
Else
snotInOrder = 0
End If
Dim rowArray(1 To 35) As String
uniqueID = GetLastRow() - 1
rowArray(1) = uniqueID
.....
rowArray(35) = s26
Dim lastRow As Long
lastRow = GetLastRow()
Debug.Print "Last Row: ", lastRow
InsertRow lastRow, rowArray
End Sub
Public Function GetLastRow() As Long
Dim wbshtSelect As Worksheet
Dim LR_wbSelectNew As Long
Set wbshtSelect = Sheets("Data")
' find last row with data in Column AI9 at current regioun starting at cell AI9
With wbshtSelect.Range("AI9").CurrentRegion
LR_wbSelectNew = .Rows(.Rows.Count).Row
End With
Dim rng As Range
Set rng = wbshtSelect.Range("AI9:AI" & LR_wbSelectNew)
' find last row inside the range, ignore values inside formulas
LR_wbSelectNew = rng.Find(What:="*", _
After:=Range("AI9"), _
LookAt:=xlPart, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
GetLastRow = LR_wbSelectNew
End Function
Function InsertRow(lastRow As Long, List() As String)
Dim newRow As Range
Dim rowArray As Variant
Dim wsData As Worksheet
Set wsData = Sheets("Data")
rowArray = List()
lastRow = lastRow + 1
For Each c In wsData.Range("A" & lastRow & ":AI" & lastRow)
For Each s In rowArray
c.Value = s
Next s
Next c
Debug.Print "New Row: ", lastRow
End Function
我有一个按钮,当我单击该按钮时,宏会运行上述代码。代码将获取最后填充的行,并在下一行中插入来自数组(在代码中)的数据。数组已正确填充,但是在将其写入单元格时,所有值都返回为 0。
我尝试使用CStr(variable) 转换值但没有成功(仍然保存为 0)。
将值写入行的函数:
Function InsertRow(lastRow As Long, List() As String)
Dim newRow As Range
Dim rowArray As Variant
Dim wsData As Worksheet
Set wsData = Sheets("Data")
rowArray = List()
lastRow = lastRow + 1
For Each c In wsData.Range("A" & lastRow & ":AI" & lastRow)
For Each s In rowArray
c.Value = s
Next s
Next c
Debug.Print "New Row: ", lastRow
End Function
知道我做错了什么吗?
注意 1:我使用的是 Office 2007 (Excel)
注意 2:我已经删除了一些重复的代码。(在代码中表示为 ....)
【问题讨论】:
-
你的函数没有返回任何东西——这可能是个问题。顺便说一句,如果您使用数组和循环,您的代码可能会明显缩短。
-
该函数不应该返回任何东西,它只是插入具有参数中给定值的行。是的,一旦我有一个完成的工作脚本,我会缩短代码。
标签: arrays vba excel ms-office excel-2007