Excel VBA:根据变量选择单元格

时间:2017-03-14 14:36:16

标签: excel vba excel-vba

我正试图在我的Excel工作表中循环一行。行根据读入工作表的数据移动,列是可变的,并根据数据进行更改。所有按钮都是由另一个宏生成的,当按下时将其内容输入到我想要读取的行中。 For Example

我的问题是,当我尝试使用我的变量引用单元格时,无论我尝试什么,我都会遇到错误。最常见的错误是“类型不匹配”

Sub Save()
Dim RowNum As Integer
Dim LastColumn As Long
Dim ws As Worksheet
Dim MyRange As Range
Dim answer As Integer
Dim i As Integer

Set ws = ActiveWorkbook.Sheets("Main")

answer = MsgBox("Sind Sie sicher, dass Sie speichen möchten?", vbYesNo + vbQuestion, "Sind Sie sicher")
If answer = vbNo Then
    Exit Sub
End If

Application.ScreenUpdating = False

'Finds the location of the button ("Speichen Freigegebene Protokolle") is pressed in order to locate the desired row
RowNum = ws.Buttons(Application.Caller).TopLeftCell.row
'Finds how many columns there are with this data set
LastColumn = ws.Cells(11, ws.Columns.count).End(xlToLeft).Column

'cycles through columns of the row
For i = 7 To LastColumn
    Set MyRange = ws.Range(Cells(RowNum, i), Cells(RowNum + 1, i))

    If MyRange.Value = "Gut" Then  '##Type Mismatch error##
        'Save
    ElseIf MyRange.Value = "Einzelfreigeben" Then
        'Save
    ElseIf MyRange.Value = "Nacharbeit" Then
        'Dont Save
    ElseIf MyRange.Value = "Ausschuss" Then
        'Dont save
    ElseIf MyRange.Value = "" Then
        Err = MsgBox("Fehler! Sie haben eine Protokole zu pruefen vergessen.", vbOKOnly, "Fehler")
        Exit Sub
    End If

Next i
End Sub

任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:0)

答案已由@Scott Craner和@Rory提供。

您可以替换所有IfElseIf并使用Select Case,如下代码所示:

Select Case MyRange.Value
    Case "Gut"
        'Save
    Case "Einzelfreigeben"
        'Save
    Case "Nacharbeit"
        'Dont Save
    Case "Ausschuss"
        'Dont save
    Case ""
        Err = MsgBox("Fehler! Sie haben eine Protokole zu pruefen vergessen.", vbOKOnly, "Fehler")
        Exit Sub
End Select

答案 1 :(得分:0)

答案已由@Scott Craner和@Rory提供。 它只是简单地引用合并单元格的左上角单元格而不是合并单元格中的所有单元格。

include "something_laravel.php"

rename_function('__', '__laravel' );

include "something_wordpress.php";

添加了ws。在 Set MyRange = ws.Range(ws.Cells(RowNum, i), ws.Cells(RowNum, i)) 之前,还有一个很好的提示,可以防止代码更改工作表和工作簿。

全部谢谢!