2015-06-12 6 views
0

Я новичок в vba, и я не могу исправить эту ошибку. Получение несоответствия типа на линии. Если NameColumn.Value = "CR" thenVBA excel runtime error 13 type несоответствие

Я чувствую, что я близок, но не вижу проблемы. Проводка полного кода, надеюсь, кто-то увидит мою ошибку! Спасибо за помощь

Application.ScreenUpdating = False 

Sheet2.Range("A1:H9999").ClearContents 

Dim vFileName 
Dim MyWorkbook As Workbook 
Dim NameColumn As Range 
Dim value1 As Range 
Dim value2 As Range 
Dim value3 As Integer 


vFileName = Application.GetOpenFilename("Text Files (*.txt),*.txt") 


Workbooks.OpenText Filename:=vFileName, _ 
    Origin:=437, _ 
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(8, _ 
    1), Array(15, 1), Array(51, 1), Array(57, 1), Array(75, 1), Array(88, 1), Array(112, 1), _ 
    Array(126, 1)), TrailingMinusNumbers:=True 
Set MyWorkbook = ActiveWorkbook 
Columns("A:I").Select 
Selection.Copy 
Windows("Book1.xlsm").Activate 
Columns("A:A").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
MyWorkbook.Activate 
Application.DisplayAlerts = False 
ActiveWindow.Close 
Set value1 = ActiveSheet.Range("K113:K249") 
Set value2 = ActiveSheet.Range("H113:H249") 
Set NameColumn = ActiveSheet.Range("I113:I249") 
If NameColumn.Value = "CR" Then 
    value1.Value = value1.Value * -1 
    ElseIf value2.Value = 0 Or value2.Value = "" Then 
    value1.Value = "" 
    Else: value1.Value = value1.Value 
End If 

Range("L1").Formula = "=Sum(H113:H249)" 


MyWorkbook.Range("L1").Value = value3 

MsgBox "Yes. Offset to zero" & value3 

Application.ScreenUpdating = True 
End Sub   
+1

'NameColumn' ссылается на несколько ячеек. Когда вы вызываете 'NameColumn.Value', VBA не знает, какое значение ячейки вам нужно. Имя NameColumn относится к одной ячейке и получает ее значение. – zedfoxus

+0

Как говорит @zedfoxus, в этом и проблема. Другим решением будет цикл через ячейки «NameColumn», а затем использовать 'if' – Raystafarian

+0

, есть несколько ячеек, которые могут иметь значение CR ... как я могу справиться с этим? Можете ли вы предоставить образец цикла кода – bobby1683

ответ

0

Вы пытаетесь оценить значение диапазона ячеек, а не одну ячейку. Попробуйте -

Set NameColumn = ActiveSheet.Range("I113:I249") 
For each c in NameColumn 
If c.Value = "CR" Then 
    value1.Value = value1.Value * -1 
    ElseIf value2.Value = 0 Or value2.Value = "" Then 
    value1.Value = "" 
    Else: value1.Value = value1.Value 
End If 
Next 

Вы, вероятно, нужно выяснить, что материал после if должны делать для каждого c.


Я думаю, что с тех пор value1 является столбец к и значение2 является столбец H, вы можете обратиться к ним в качестве смещения к колонку I -

Set NameColumn = ActiveSheet.Range("I113:I249") 
For each c in NameColumn 
If c.Value = "CR" Then 
    c.offset(,2) = c.offset(,2) * -1 
    ElseIf c.offset(,-1) = 0 Or c.offset(,-1) = "" Then 
    c.offset(,2) = "" 
    Else: c.offset(,2) = c.offset(,2) 
End If 
Next 
+0

спасибо! нижний код исправил мою ошибку – bobby1683

+1

Если у вас была проблема исправлена, не забудьте принять ответ, чтобы человек получил репутацию. – ChipsLetten

Смежные вопросы