我正在为视频游戏制作excel表来练习我的编码,因为我上次使用VBA已经两年了,我的训练非常基础。如果您不介意查看我的代码并让我知道可能会发生什么,我将非常感激。
基本上我试图做的是允许用户构建"通过使用主工作表上的下拉菜单来确定角色。然后点击"保存"按钮,宏搜索CharacterData表(每10行,因为表是9行,每个表用空格分隔)包含字符名称的表并更新(覆盖)它。代码第一次工作,但如果我再次尝试覆盖,它将弹出错误。它可能与数据验证下拉列表或表中的条件格式有关吗?
(覆盖前的空白模板)https://imgur.com/a/wpg6m
旁注:目标是用户以后可以使用构建菜单上的下拉菜单选择他们想要的角色,然后单击"加载"用于加载CharacterData工作表中所有数据的按钮。
Sub SaveCharacter()
For i = 0 To 13 Step 1
If Worksheets("CharacterBuild").Cells(2, "C") = Worksheets("CharacterData").Cells((10 * i) + 1, "B") Then
m = (10 * i) + 1
n = m + 8
Worksheets("CharacterBuild").Range("B2:G10").Copy Worksheets("CharacterData").Range(Cells(m, "A"), Cells(n, "F"))
Exit For
ElseIf i = 13 Then
MsgBox ("Could not find save file. Must create one on CharacterData sheet.")
End If
Next i
End Sub
答案 0 :(得分:1)
您的代码是指使用
的范围Worksheets("CharacterData").Range(Cells(m, "A"), Cells(n, "F"))
由于您尚未指定Cells
个对象引用哪个工作表,因此它们默认为ActiveSheet.Cells
,因此您的代码相当于
Worksheets("CharacterData").Range(ActiveSheet.Cells(m, "A"), ActiveSheet.Cells(n, "F"))
如果Worksheets("CharacterData")
是ActiveSheet
,那就没问题,但是只要其他工作表处于活动状态,那么您就会尝试在一个工作表上引用一个范围完全不同的工作表。
您应该将代码的这一部分更改为
Worksheets("CharacterData").Range(Worksheets("CharacterData").Cells(m, "A"), Worksheets("CharacterData").Cells(n, "F"))
进入的一个好习惯是始终通过指定来限定您的Cells
,Range
,Rows
,Columns
等参考资格他们指的是哪张。