Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果列q=*_Excel_Formatting_Underline_Vba - Fatal编程技术网

Excel 如果列q=*

Excel 如果列q=*,excel,formatting,underline,vba,Excel,Formatting,Underline,Vba,我有一个我不能解决的问题。问题在于Q列。我想要的很简单: 从第5行扫描列Q直到最后一行(最后一行值在单元格“AL1”中) 如果该行Q中有“*”(符号存储在单元格“AK2”中)。 然后在该行中的单元格A到AF之间画双下划线,继续向下扫描直到最后一行 Sub Reformat() Dim SrchRng3 As Range Dim c3 As Range, f As String Set SrchRng3 = ActiveSheet.Range("Q5",

我有一个我不能解决的问题。问题在于Q列。我想要的很简单:

从第5行扫描列Q直到最后一行(最后一行值在单元格“AL1”中) 如果该行Q中有“*”(符号存储在单元格“AK2”中)。 然后在该行中的单元格A到AF之间画双下划线,继续向下扫描直到最后一行

    Sub Reformat()

    Dim SrchRng3 As Range
    Dim c3 As Range, f As String

   Set SrchRng3 = ActiveSheet.Range("Q5",          ActiveSheet.Range("Q100000").End(xlUp))
Set c3 = SrchRng3.Find(Range("ak2"), LookIn:=xlValues)
If Not c3 Is Nothing Then
    f = c3.Address
    Do
        With ActiveSheet.Range("A" & c3.Row & ":AF" & c3.Row)
        Range("A" & c3.Row & ":AF" & c3.Row).Select
                .Borders (xlEdgeBottom)
                .LineStyle = xlDouble
                .ThemeColor = 4
                .TintAndShade = 0.399945066682943
                .Weight = xlThick
        End With
        Set c3 = SrchRng3.FindNext(c3)
    Loop While c3.Address <> f
End If
End Sub
Sub-Reformat()
尺寸SrchRng3 As范围
尺寸c3作为范围,f作为字符串
设置SrchRng3=ActiveSheet.Range(“Q5”,ActiveSheet.Range(“Q100000”)。结束(xlUp))
设置c3=SrchRng3.Find(范围(“ak2”),LookIn:=xlValues)
如果不是,那么c3什么都不是
f=c3.地址
做
使用ActiveSheet.Range(“A”&c3.Row&“:AF”&c3.Row)
范围(“A”&c3.行&“:AF”&c3.行)。选择
.边框(底部)
.LineStyle=xlDouble
.ThemeColor=4
.TintAndShade=0.399945066682943
.重量=xl厚
以
Set c3=SrchRng3.FindNext(c3)
循环c3。地址f
如果结束
端接头

这就是您要尝试的吗?我已经对代码进行了注释,所以您理解它应该不会有问题。如果您仍然这样做或遇到错误,只需告诉我:)

屏幕截图


自动筛选版本:

Option Explicit

Public Sub showSymbol()
    Dim lRow As Long, ur As Range, fr As Range

    Application.ScreenUpdating = False
    With ActiveSheet
        lRow = .Range("Q" & .Rows.Count).End(xlUp).Row
        Set ur = .Range("A5:AF" & lRow)
        Set fr = ur.Offset(1).Resize(ur.Rows.Count - 1)

        ur.Columns(17).AutoFilter Field:=1, Criteria1:="~" & .Range("AK2").Value2
        fr.Borders(xlEdgeBottom).LineStyle = xlDouble
        fr.Borders(xlInsideHorizontal).LineStyle = xlDouble
        ur.AutoFilter
    End With
    Application.ScreenUpdating = True
End Sub

要为一个特定图纸的每个OnCahange事件执行此命令,请将此命令添加到其VBA模块:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .CountLarge = 1 Then 'run only if one cell was updated

            'restrict the call to column Q only, and if the new value is same as cell AK2
            If .Column = 17 And .Value2 = Me.Range("AK2").Value2 Then showSymbol

        End If
    End With
End Sub

要对文件中的所有工作表执行此操作,请将其添加到此工作簿的VBA模块:

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Target.CountLarge = 1 Then If Target.Column = 17 Then showSymbol

End Sub

非常感谢你帮助我,悉达思。这段代码非常好,几乎是完美的。唯一的问题是它只选择第一个“”。“”在q列中以随机间隔显示多次。其他一切都很完美。再次感谢,希望这只是一个小小的改变。至于原始代码,它是许多不成功的谷歌搜索的许多片段。谢谢你的提示。我在宏的其余部分使用了它们,这是Tank you的一部分,代码现在是完美的,并且完全符合我的要求。我会问你我在另一个答案中问过的同样的问题。是否有任何方法使此宏始终处于打开状态。这样,一旦输入*,下划线就会出现?会让你开始的。如果你被困住了,那么可以自由地问一个新问题。希望我在这里回答了您的主要问题?我添加了在该链接上找到的代码,但它似乎并不总是运行代码。我不知道是否需要将宏与我创建的按钮解除链接,或者是否需要将autrun代码和下划线代码插入到新模块中。我稍后再试一次,让你知道谢谢@PaulBica,这个选项几乎完美且非常迅速。谢谢你提醒我使用屏幕更新来加快速度。我的宏技能有很多蛛网,谢谢你的代码。如果一行中有两个*的话,有时代码就不会抓住第一个或第二个。是否需要修改偏移以更正此问题?此外,该宏可能会在同一工作表上多次运行。是否仍有此“始终运行”命令“/一旦*置于列Q中,宏将自动格式化该行?很抱歉所有的后续行动,但我喜欢让事情白痴证明我更新了答案,以解决您提到的问题,并允许它一直处于“开启”状态-感谢您的反馈!我插入了一个新模块并输入了您提供的第一个选项,但它似乎不起作用。我会在会议结束后再试一次,但再次感谢您的帮助
工作表_Change()
必须进入工作表的模块(不是新的VBA模块)-因此,如果您想更新Sheet1,请打开Sheet1的VBA模块(在“Microsoft Excel对象”下,而不是“模块”)自动更新效果很好,我唯一的问题是,如果我试图清除页面上的数据或使用其他宏在页面上放置数据时遇到错误“运行时错误13类型不匹配”选项显式私有子工作表_Change(ByVal Target As Range)“仅限制对Q列的调用,如果Target.Column=17且Target.Value2=Me.Range(“AK2”).Value2,则新值与单元格AK2相同,则“这是调试器高亮显示的位置”显示符号代码End if End Sub
Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Target.CountLarge = 1 Then If Target.Column = 17 Then showSymbol

End Sub