【问题标题】:VBA excel runtime error 13 type mismatchVBA excel运行时错误13类型不匹配
【发布时间】:2015-06-13 01:52:24
【问题描述】:

我是 vba 新手,我似乎无法修复此错误。 在线获取类型不匹配。 如果 NameColumn.Value = "CR" 那么

我觉得我很接近但看不到问题所在。 发布完整代码希望有人会看到我的错误! 感谢您的帮助

    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        

【问题讨论】:

  • NameColumn 指的是多个单元格。当您调用NameColumn.Value 时,VBA 不知道您想要哪个单元格的值。让 NameColumn 引用单个单元格并获取其值。
  • 正如@zedfoxus 所说,这就是问题所在。另一种解决方案是遍历NameColumn 的单元格,然后使用if
  • 有多个单元格的值可能为 CR...我该如何处理?能否提供循环代码示例

标签: vba excel


【解决方案1】:

您正在尝试评估一系列单元格的值,而不是单个单元格。试试 -

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 是 k 列,value2 是 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

【讨论】:

  • 如果您的问题已解决,请记住接受答案,以便此人获得代表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多