【问题标题】:VBA Excel array writing all values as 0 in cellsVBA Excel数组将所有值写入单元格中的0
【发布时间】: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


【解决方案1】:

修复它。我想将一个数组写入一个范围。以下是有效的:

Function InsertRow(lastRow As Long, List() As String)

    Dim newRow As Range
    Dim rowArray As Variant
    Dim i As Long

    Dim wsData As Worksheet
    Set wsData = Sheets("Data")

    rowArray = List()

    lastRow = lastRow + 1


    wsData.Range("A" & lastRow & ":AI" & lastRow) = rowArray

    Debug.Print "New Row: ", lastRow

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多