当鼠标点到excel单元格时,单元格所在的行和列会自动显示颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当鼠标点到excel单元格时,单元格所在的行和列会自动显示颜色相关的知识,希望对你有一定的参考价值。
这个需要用到代码,方法如下:1.打开需要应用的excel。
2.按alt+f11,会弹出代码编辑框。
3.在左边会显示出上下两个类别框里,名字分别是project-vbaproject和properties-sheet1(这个sheet几是你当前编辑的表单)
(注意:如果什么也新出来的窗口什么也不显示的话,就->视图->工程资源管理器
就会出来了,此时你可以在project-vbaproject和properties-sheet1上直接右键查看代码,在里面直接粘贴第六条的代码即可)
4.在上面的框边有三个小图标,view
code(查看代码),view
project(查看项目),toggle
folder(打开或折叠文件夹)。
5.选择view
code,会弹出一个编辑框。
6.在编辑框里黏贴下面的语言:
private
sub
worksheet_selectionchange(byval
target
as
range)
with
target
'清除工作表单元格的背景色
.parent.cells.interior.colorindex
=
xlnone
'设置选中区域所在行的背景色
.entirerow.interior.color
=
vbgreen
'设置选中区域所在列的背景色
.entirecolumn.interior.color
=
vbgreen
end
with
end
sub
7.
贴完之后,关闭对话框。关闭编辑框,返回到excel。
8.这时候你再点击任意单元格,就会自动出现你要的效果了。
备注:上面语言中的汉语不用删除,汉语可以可以帮助你了解该行的意思,同时也不会影响编辑效果。如果对行或列的色彩不满意,可以参考下面的色彩代码,自行修改。
vbblack
黑
vbred
红
vbgreen
绿
vbyellow
黄
vbblue
蓝
vbmagenta
洋红
vbcyan
青
vbwhite
白
上面的办法对已经有填充色的表格是个灾难,它会清楚原有颜色。
你也可以试试下面的方法:
private
sub
worksheet_selectionchange(byval
target
as
excel.range)
on
error
resume
next
cells.formatconditions.delete
with
target.entirerow.formatconditions
.delete
.add
xlexpression,
,
"true"
.item(1).interior.colorindex
=
7
end
with
end
sub
这个虽然只能显示行不能显示列,但是不会破坏原有填充色。
回答完毕,希望是你要的。 参考技术A 这个需要用VBA做一个代码。
按ALT+F11打开VBA窗口,在左边找到ThisWorkBook项目,双击后会在右边出现一个空白窗口,把下面代码复制进去:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
Cells.Interior.ColorIndex = xlNone
Set rng = Application.Union(Target.EntireColumn, Target.EntireRow)
rng.Interior.ColorIndex = 24
End Sub
回到EXCEL窗口,当选定一个单元格时,这个格的行、列都会被填充颜色。本回答被提问者和网友采纳
NSTableView:检测鼠标点击以及行和列
【中文标题】NSTableView:检测鼠标点击以及行和列【英文标题】:NSTableView: detecting a mouse click together with the row and column 【发布时间】:2013-09-04 19:30:04 【问题描述】:我试图检测何时在 NSTableView 中发生鼠标点击,以及何时发生,以确定被点击的单元格的行和列。
到目前为止我已经尝试过使用NSTableViewSelectionDidChangeNotification,但是有两个问题:
-
它仅在选择更改时触发,而我希望每次鼠标点击,即使它在当前选定的行上。
调用我的委托时,NSTableView 的 clickedRow 和 clickedColumn 属性均为 -1。
有没有更好(和正确)的方法?
【问题讨论】:
【参考方案1】:有一个简单的方法。
在 macOS 10.12.2 和 Xcode 8.2.1 上使用 Swift 3.0.2 测试
让
tableView.action = #selector(onItemClicked)
然后
@objc private func onItemClicked()
print("row \(tableView.clickedRow), col \(tableView.clickedColumn) clicked")
【讨论】:
似乎是最好的答案。 一定要设置tableView.target
。
太棒了!这确实是最好的答案
如果你声明像@IBAction private func tableRowWasClicked(_ tableView: NSTableView)
这样的方法,那么在你的XIB或故事板中,你可以将表格视图的action
出口连接到方法而不是设置target
和action
代码。
似乎这不仅是一个很好的答案,而且是它应该工作的方式。因为实现 mouseDown 和类似的方法必须处理当表格放置在 NSScrollView 内时发生移动的大量坐标。【参考方案2】:
捕捉用户点击一行(仅当用户点击一行时,而不是在以编程方式选择它时):
继承您的 NSTableView 并声明协议
MyTableView.h
@protocol ExtendedTableViewDelegate <NSObject>
- (void)tableView:(NSTableView *)tableView didClickedRow:(NSInteger)row;
@end
@interface MyTableView : NSTableView
@property (nonatomic, weak) id<ExtendedTableViewDelegate> extendedDelegate;
@end
MyTableView.m
处理鼠标按下事件(注意,当用户点击外部时不会调用委托回调,也许你也想处理,在这种情况下,只需注释掉条件“@987654322 @")
- (void)mouseDown:(NSEvent *)theEvent
NSPoint globalLocation = [theEvent locationInWindow];
NSPoint localLocation = [self convertPoint:globalLocation fromView:nil];
NSInteger clickedRow = [self rowAtPoint:localLocation];
[super mouseDown:theEvent];
if (clickedRow != -1)
[self.extendedDelegate tableView:self didClickedRow:clickedRow];
让你的WC、VC符合ExtendedTableViewDelegate。
@interface MyViewController : DocumentBaseViewController<ExtendedTableViewDelegate, NSTableViewDelegate, NSTableViewDataSource>
将MyTableView的extendedDelegate设置为你的WC、VC(MyViewController)
MyTableView.m
中的某处self.myTableView.extendedDelegate = self
在委托(MyViewController.m)中实现回调
- (void)tableView:(NSTableView *)tableView didClickedRow:(NSInteger)row
// have fun
【讨论】:
如何处理 mouseEntered & mouseExit 事件?有什么想法吗?【参考方案3】:我更喜欢这样做。
覆盖
-(BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row;
提供超级实现;
RequiredRow = row;
RequiredColumn = [tableView clickedColumn];
希望这会有所帮助。
【讨论】:
这不仅是由用户操作触发的,如问题“我试图检测何时在 NSTableView 中发生鼠标点击,以及何时发生,以确定行和列”中所述被点击的单元格”,而且每次选择以编程方式更改时 这也会在用户执行点击以外的操作时触发,例如在列表具有焦点时按空格键或键入字母键。【参考方案4】:如果有人正在寻找 Peter Lapisu 答案的 Swift 3/4/5 版本:
为 NSTableView 添加一个扩展(NSTableView+Clickable.swift):
import Foundation
import Cocoa
extension NSTableView
open override func mouseDown(with event: NSEvent)
let globalLocation = event.locationInWindow
let localLocation = self.convert(globalLocation, from: nil)
let clickedRow = self.row(at: localLocation)
super.mouseDown(with: event)
if (clickedRow != -1)
(self.delegate as? NSTableViewClickableDelegate)?.tableView(self, didClickRow: clickedRow)
protocol NSTableViewClickableDelegate: NSTableViewDelegate
func tableView(_ tableView: NSTableView, didClickRow row: Int)
然后要使用它,请确保实现新的委托协议:
extension MyViewController: NSTableViewClickableDelegate
@nonobjc func tableView(_ tableView: NSTableView, didClickRow row: Int)
Swift.print("Clicked row \(row)")
@nonobjc
属性使关于它接近 didClick 的警告静音。
【讨论】:
它可以工作,但是当点击项目时,没有选择任何内容【参考方案5】:以防万一有人在 SWIFT 和/或 NSOutlineView 中寻找它。
基于@Peter Lapisu 的说明。
class MYOutlineViewDelegate: NSOutlineView, NSOutlineViewDelegate,NSOutlineViewDataSource
//....
extension MYOutlineViewDelegate
func outlineView(outlineView: NSOutlineView, didClickTableRow item: AnyObject?)
//Click stuff
override func mouseDown(theEvent: NSEvent)
let globalLocation:NSPoint = theEvent.locationInWindow
let localLocation:NSPoint = self.convertPoint(globalLocation, fromView: nil)
let clickedRow:Int = self.rowAtPoint(localLocation)
super.mouseDown(theEvent)
if (clickedRow != -1)
self.outlineView(self, didClickTableRow: self.itemAtRow(clickedRow))
【讨论】:
mouseDown
不应出现在您的MYOutlineViewDelegate
中【参考方案6】:
查看 tableViewSelectionIsChanging 通知,这里是来自 NSTableView.h 的 cmets
/* 可选 - 在即将更改选择时调用,但请注意,tableViewSelectionIsChanging: 仅在鼠标事件更改选择而不是键盘事件时调用。 */
我承认这可能不是关联鼠标点击的最可靠方法,但这是另一个需要调查的领域,因为您对鼠标点击感兴趣。
【讨论】:
我不认为这涵盖了以下问题的要求:“我希望每次鼠标点击,即使它在当前选定的行上。”以上是关于当鼠标点到excel单元格时,单元格所在的行和列会自动显示颜色的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?