簡體   English   中英

Excel VBA 2010-If-Then-ElseIf語句無法識別字符串變量

[英]Excel VBA 2010 - If-Then-ElseIf statement not recognizing string variables

我有一個Excel VBA宏,其中包含一個For-Next循環中的If-Then-ElseIf語句。 在描述問題之前,我將顯示代碼。 我發布了整個代碼,以防萬一我認為問題出在If語句之內。

碼:

Option Explicit

Sub GetData()

    Dim wsPasteTo As Worksheet, wbDATA As Workbook
    Dim NextRow As Long, LastRow As Long, i As Long

    Set wsPasteTo = ThisWorkbook.Sheets("ACP")
    NextRow = wsPasteTo.Range("A" & Rows.Count).End(xlUp).Row + 2

    Set wbDATA = Workbooks.Open("\\cmicro.com\Shares\Amb\Amb-Probes\DataLogs\CQS-03-033-2012 Coax Shelf Cut Log R2.6.xlsm", ReadOnly:=True)
    Application.ScreenUpdating = False

    With wbDATA.Sheets("ACP")

        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To LastRow

            If Cells(i, "E") = "Angle" Then
                .Range("K2:L" & LastRow).Copy
                wsPasteTo.Range("I" & NextRow).PasteSpecial xlPasteValues

            ElseIf Cells(i, "E") = "Vertical" Then
                .Range("K2:L" & LastRow).Copy
                wsPasteTo.Range("D" & NextRow).PasteSpecial xlPasteValues

            Else
                .Range("K2:L" & LastRow).Copy
                wsPasteTo.Range("N" & NextRow).PasteSpecial xlPasteValues

            End If

        Next i

    End With

    Application.ScreenUpdating = True
    wbDATA.Close False

End Sub

此宏根據“復制工作簿”的E列中的內容從另一個Excel工作簿(稱為“復制工作簿”)復制數據。 E列有3個選項供用戶選擇:“角度”,“垂直”和“ n / a”。 我使用了數據驗證,因此用戶必須從所有E列單元格的下拉菜單中選擇這3個選項之一。 基於此,宏將數據粘貼到單獨工作簿中的列中,我們將其稱為“粘貼工作簿”。

該代碼沒有錯誤,但是所有數據都被粘貼到“粘貼工作簿”中的錯誤位置。

我認為問題出在代碼行:

If Cells(i, "E") = "Angle" Then

ElseIf Cells(i, "E") = "Vertical" Then

因為當我處於調試模式時,這些行會被跳過,就好像“ E”列中沒有字符串變量“ Vertical”和“ Angle”一樣。 這就是為什么所有數據都集中在一個地方的原因。

我不知道代碼有什么問題。 我簽出了“復制工作簿”中的E列,並且沒有拼寫/大寫問題。 也許用Case語句對我所做的事情會更好,但是我對VBA並不了解,我也不知道該怎么做。

Option Explicit

Sub GetData()

Dim wsPasteTo As Worksheet, wbDATA As Workbook
Dim NextRow As Long, LastRow As Long, i As Long
Dim val, col 

    Set wsPasteTo = ThisWorkbook.Sheets("ACP")
    NextRow = wsPasteTo.Range("A" & Rows.Count).End(xlUp).Row + 2

    Set wbDATA = Workbooks.Open( _
          "\\cmicro.com\Shares\Amb\Amb-Probes\DataLogs\" & _
         "CQS-03-033-2012 Coax Shelf Cut Log R2.6.xlsm", ReadOnly:=True)

    Application.ScreenUpdating = False

    With wbDATA.Sheets("ACP")

        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 2 To LastRow

            val = .Cells(i, "E").Value
            Select Case val
                Case "Angle": col = "I"
                Case "Vertical": col = "D"
                Case Else: col = "N"
            End Select

            wsPasteTo.Cells(NextRow, col).Resize(1,2).Value = _
                                .Cells(i, "K").Resize(1, 2).Value

            NextRow = NextRow + 1 'or whatever....

        Next i

    End With

Application.ScreenUpdating = True
wbDATA.Close False

End Sub

這是工作代碼:

Option Explicit

Sub GetData()

Dim wsPasteTo As Worksheet, wbDATA As Workbook
Dim NextRow As Long, LastRow As Long, i As Long
Dim val, col

Set wsPasteTo = ThisWorkbook.Sheets("ACP")

Set wbDATA = Workbooks.Open("\\cmicro.com\Shares\Amb\Amb-Probes\DataLogs\CQS-03-033-2012 Coax Shelf Cut Log R2.6.xlsm", ReadOnly:=True)
Application.ScreenUpdating = False

    With wbDATA.Sheets("ACP")

        LastRow = .Range("E" & .Rows.Count).End(xlUp).Row

        For i = 2 To LastRow

            val = .Cells(i, "E").Value
            Select Case val
                Case "Angle": col = "I"
                    NextRow = wsPasteTo.Range("I" & Rows.Count).End(xlUp).Row + 1
                Case "Vertical": col = "D"
                    NextRow = wsPasteTo.Range("D" & Rows.Count).End(xlUp).Row + 1
                Case Else: col = "N"
                    NextRow = wsPasteTo.Range("N" & Rows.Count).End(xlUp).Row + 1
            End Select

            wsPasteTo.Cells(NextRow, col).Resize(1, 2).Value = .Cells(i, "K").Resize(1, 2).Value

        Next i

    End With

Application.ScreenUpdating = True
wbDATA.Close False

End Sub

我忘記了每種數據類型的“ NextRow”都是唯一的。

感謝您的幫助,蒂姆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM