Excel VBA 2010 – If-Then-ElseIf语句不识别stringvariables

我有一个Excel VBAmacros与If-Then-ElseIf语句在一个For-Next循环内。 在描述问题之前,我将展示代码。 我发布整个代码,以防万一我错误地认为问题在于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 

该macros根据复制工作簿的E列中的内容复制另一个Excel工作簿中的数据(我们称之为“复制工作簿”)。 E栏有3个供用户select的选项:“angular度”,“垂直”和“不适用”。 我使用数据validation,因此用户必须从所有列E单元格中的下拉列表中select3个选项之一。 基于此,macros将数据粘贴到单独的工作簿中的列中,我们将其称为“粘贴工作簿”。

此代码没有错误,但是所有数据都被粘贴到粘贴工作簿中的错误位置。

我认为问题是与代码行:

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

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

因为当我处于debugging模式时,这些行会被忽略,就像在列“E”中stringvariables“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”都是唯一的。

谢谢你的帮助Tim。