我正试图在我的Excel工作表中循环一行。行根据读入工作表的数据移动,列是可变的,并根据数据进行更改。所有按钮都是由另一个宏生成的,当按下时将其内容输入到我想要读取的行中。
我的问题是,当我尝试使用我的变量引用单元格时,无论我尝试什么,我都会遇到错误。最常见的错误是“类型不匹配”
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
任何帮助都会非常感激!
答案 0 :(得分:0)
答案已由@Scott Craner和@Rory提供。
您可以替换所有If
和ElseIf
并使用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))
之前,还有一个很好的提示,可以防止代码更改工作表和工作簿。
全部谢谢!