[英]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.