我正在使用此脚本通过 shift + 鼠标滚轮在 Excel 中进行水平滚动:
#IfWinActive, ahk_class XLMAIN
+WheelDown::ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0,0,3,0)
+WheelUp::ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0,0,0,3)
它对于表格来说效果很好,但是当我按住 shift 并在图表上滚动时,出现此错误:
Error 0x800A03EC -
Source: Microsoft Excel
Description: Unable to get the SmallScroll proprety of the Window class
HelpFile: xlmain11.chm
HelpContext: 0
Specifically: SmallScroll
Line#
002: Return
---> 002:
ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0,0,3,0)
002: Return
003:
ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0,0,3,0)
003: Return
004: Exit
004: Exit
004: Exit
有什么方法可以解决这个问题,或者我是否将永远拖动滚动条,因为 Excel 的用户体验很差?
我在 Windows 10 上使用 Excel 2016。
答案1
我知道这已经很老了,但是对于那些正在寻找 Excel 中的水平滚动的人来说,这里有一个答案。
下面的 AutoHotKey 脚本有效。我在 Excel 2010 中做了一些测试,它在带有图表的工作表上仍然可以正常滚动。如果您选择了图表中的数据,它实际上会沿着数据滚动,这很有趣,但出乎意料。但是,只要您没有选择图表中的数据,它就会像往常一样水平滚动。希望这能有所帮助!
#Singleinstance Force
;Horizontal scrolling in Excel only
#IfWinActive ahk_class XLMAIN
+WheelUp::
SetScrollLockState, On
SendInput {Left}
SetScrollLockState, Off
Return
+WheelDown::
SetScrollLockState, On
SendInput {Right}
SetScrollLockState, Off
Return
; Horizontal scrolling in everything except Excel.
#IfWinNotActive ahk_class XLMAIN
+WheelDown::WheelRight
+WheelUp::WheelLeft
答案2
我发现上面的脚本很笨拙且缓慢:基本上发送一定数量的 {Left} 或 {Right} 命令。AHK 解决方案似乎都不可靠。
GitHub 上的这个程序对于 Excel 和 Word 2016 的水平滚动效果非常好https://github.com/T800G/OfficeScroll 只需按下 Shift 并旋转轮子...
答案3
用if判断activesheet的类型,worksheet是-4167,chart是3。
#if WinActive("ahk_exe excel.exe")
+wheelup:: ;scroll left
xl := Excel_Get()
if xl.ActiveSheet.Type = -4167
xl.ActiveWindow.SmallScroll(0,0,0,3)
return
+wheeldown:: ;scroll right
xl := Excel_Get()
if xl.ActiveSheet.Type = -4167
xl.ActiveWindow.SmallScroll(0,0,3,0)
return
#if
或者你可以使用 scrolllock
#if WinActive("ahk_exe excel.exe")
+wheelup:: ;scroll left
SetScrollLockState, alwayson
send {right 3}
SetScrollLockState, alwaysoff
return
+wheeldown:: ;scroll right
SetScrollLockState, alwayson
send {left 3}
SetScrollLockState, alwaysoff
return
#if
答案4
Ctrl + Shift + Scroll
这在 Office 365 中原生运行。比自动热键解决方案更好,响应速度更快。
我更喜欢重新映射它,这样它就可以在不按住 Ctrl 键的情况下工作。(可选)
; Shift + Scroll
;Horizontal scrolling in Excel only
#IfWinActive ahk_class XLMAIN
+WheelUp::
Send ^+{WheelUp}
Return
+WheelDown::
Send ^+{WheelDown}
Return
#IfWinActive