仅将macros代码用于一个特定的列

我仍然是在Excel中编程的新手,我无法对代码进行细微的更改。我的代码使用户可以select一个单元格,然后使用向上和向下箭头来select一个定义的值。 看下面的代码,我在我的工作表中调用函数“UpOn​​e”和“DownOne”,然后我在模块中保存了我保存的string值。

工作表代码

Private Sub Worksheet_Open() Application.OnKey "{UP}", "UpOne" Application.OnKey "{DOWN}", "DownOne" End Sub 

模块代码

 Sub DownOne() Select Case ActiveCell.Value Case "" ActiveCell.Value = "PASS" Case "PASS" ActiveCell.Value = "FAIL" Case "FAIL" ActiveCell.Value = "Unknown" End Sub Sub UpOne() Select Case ActiveCell.Value Case "Unknown" ActiveCell.Value = "FAIL" Case "FAIL" ActiveCell.Value = "PASS" Case "PASS" ActiveCell.Value = "" End Sub 

我的问题是如何使这个代码只适用于一个特定列中的所有单元格? 当用户select不同的列时,我将如何获得不同的值。 因此,如果用户在列“J”中select一个空单元格,他/她可以通过诸如“A”,“B”,“C”等值的箭头键导航,但是当他/她在列“N “,他/她可以浏览一组不同的值,如”E“,”F“,”G“等,谢谢你的帮助!

而不是每次select一个单元格时禁用/启用代码(再加上需要满足多单元格select),使用数据validation会更加简单。 您可以设置可应用于特定单元格的列表

Debra Dalgleish在Contextures的数据validation方面进行了很好的讨论 在这里输入图像说明

基于您原始方法的粗糙代码:

 Sub DownOne() CycleValue Selection, -1 End Sub Sub UpOne() CycleValue Selection, 1 End Sub Sub CycleValue(rng As Range, GoDir As Integer) Dim arrA, arrB Dim arrVals, val Dim c As Range, m, indx As Integer Dim lb As Integer, ub As Integer Dim ProcessThis As Boolean arrA = Array("Fail", "Pass", "") arrB = Array("Eggs", "Bacon", "Toast", "Beans", "") For Each c In rng.Cells ProcessThis = True 'what values are we cycling through? 'based on column position If c.Column = 1 Then arrVals = arrA ElseIf c.Column = 5 Then arrVals = arrB Else ProcessThis = False 'not checking this column End If If ProcessThis Then lb = LBound(arrVals) ub = UBound(arrVals) val = Trim(c.Value) m = Application.Match(val, arrVals, 0) If IsError(m) Then indx = lb Else m = m - 1 '1-based indx = m + GoDir If indx < lb Then indx = ub If indx > ub Then indx = lb End If c.Value = arrVals(indx) End If Next c End Sub