Questions tagged «vba»

Visual Basic应用程序;所有Microsoft Office应用程序中使用的Visual Basic的子集。考虑将该标签与该特定应用程序的标签一起使用。关于VBA的好问题通常包含一些代码,并要求解决特定问题。要求完整解决方案的问题(请给我代码/如何使用VBA做到这一点)不在主题之内,将因为过于广泛而封闭。

1
VBScript回车
我编写以下VB脚本,以便从Linux机器上的WIN XP运行命令,并将输出命令重定向到out.txt文件(在C:\下) 我的VB脚本我将/ etc / hosts文件从Linux机器打印到out.txt文件 脚本工作正常,但我有一个问题: / etc / hosts文件打印在带有一个长行的out.txt文件中,代替三行 示例:(out.txt) 127.0.0.1 localhost 19.20.183.99 MY_IP 10.10.10.10 LOOP 就地在out.txt中打印以下主机文件 127.0.0.1 localhost 19.20.183.99 MY_IP 10.10.10.10 LOOP 我的VB脚本 Const TARGET_HOST = "19.20.183.99" const PATH = "cat /etc/hosts" const LOGIN = "root" const PASS = " dgdgd " Const PLINKPATH="""C:\dir1\plink.exe""" Set Sh = …

1
当小区D的值改变时,需要VBA代码来清除小区AQ的内容; Microsoft Excel for Office 365 MSO 32位
我会先说这个编程不是我的强项,但我会感激任何帮助。 当单元格D(在同一行上)的值发生变化时,我使用了以下公式来尝试清除单元格AQ的内容。目前,当单元格D中的值变为1时,内容仅在AQ中被清除(可能是由于“如果目标= 1然后”行。我使用什么代替“1”以便所有更改,从任何值到任何值,将启动单元格AQ的ClearContents指令? Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D7:D506")) Is Nothing Then If Target = 1 Then Range("AQ" & Target.Row).ClearContents End If End If End Sub

1
Excel 2016:VBA:Formula会在宏中引发语法错误
我的Excel数据包含F列,其格式为日期/时间:11/13/2018 9:33:00 PM现在,我需要根据公式在H列中显示该日期=TEXT(F2,("MMM-dd")) (我现在手动执行此操作工作正常) VBA似乎可以工作,直到它达到这个公式,它会抛出我的错误: Compile Error Syntax Error 其余代码按预期工作。我尝试过替代配方,它们似乎有效。例如,如果我使用 rng.Value = "words"或 rng.Formula = "2+2" 宏按预期工作 无法编译的代码: Sub test() Dim rng As Range Dim sht As Worksheet Dim Lastrow As Long Set sht = ThisWorkbook.Sheets("Sheet1") Lastrow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row Set rng = Range("H2:H" & Lastrow) rng.Formula = "=TEXT(F2,("MMM-dd"))" End …

1
到达空行时停止VBA宏
我最近尝试使用宏来简化Excel 2010下的一些任务,因为我正在使用不幸的巨大数据库。 我已经找到了合并重复行和连接唯一数据/注释所需的代码,这要归功于这个挽救生命的线程:如何将多行中的值组合成Excel中的单行? 对于像我这样的初学者来说代码很容易理解(我确实希望并尝试理解我在做什么而不是盲目地复制粘贴)。我遇到的唯一问题是宏似乎没有停在最后一行,并最终填充excel表的其余部分。 获得了所需的结果,如第4行到第6行所示,但从第29行开始...... 但是你可以看到从第29行开始,宏保持“;” 在第10栏。 这是我改编的代码: Sub merge_dupes_and_comments() 'define variables Dim RowNum As Long, LastRow As Long Application.ScreenUpdating = False RowNum = 2 LastRow = Cells.SpecialCells(xlCellTypeLastCell).row Range("A2", Cells(LastRow, 10)).Select For Each row In Selection With Cells 'if OC number matches If Cells(RowNum, 2) = Cells(RowNum + 1, 2) …

1
比较两个不同VBA的相似表格中Excel中数据的值变化?
我需要匹配column A具有相似数据的两个不同表中的数据,然后比较中的值column C。sheet 1提供本月的数据,sheet 2从上个月开始。 我column A的sheet 1和column A中sheet 2都有很多相同的价值观,但在不同的顺序。 两者column C都有数值。我想通过column C以红色(减少),绿色(增加)突出显示单元格来指示数值的变化,如果没有变化或者它是新值,则保持颜色相同。 我只需要为较新的工作表(sheet 1)着色。看图像。 这可以在没有VBA(或使用非常简单的VBA)的情况下完成吗?

0
疑难解答 - 如何使用VBA在Excel(2013)中镜像来自不同工作表的两个单元格
我正在为广泛的问题跟踪文件进行VBA设置。我有一张包含所有问题的表格,很难管理。我有另一张表,旨在向用户显示给定日期的10个最高优先级项目,允许他们更新这些项目,然后检索更多问题。由于镜像数据的方式,我需要用户能够操纵任一工作表上的数据并使其镜像到另一个工作表。 我从另一个问题中找到了一些建议的代码,只要我只有一个镜像单元,我就能使它工作,但是一旦我开始复制代码以添加到其他单元格中(需要大约200个单元格)镜像),所有单元格都停止更新(包括以前工作的单元格)。 在我添加额外的单元镜像代码行之前,我看到的另一个问题与工作表如何报告十个最高优先级的项目有关。我创建了一个宏,它采用第一张表(难以理解的表)并以特定方式对数据进行排序,并将该宏附加到另一页上的按钮。当我按下按钮时,它会正确排序第一张表中的数据,但镜像的单元格永远不会更新。所以我需要知道1)如何调整我的代码以允许镜像多个单元格,以及2)当我使用按钮对第一张纸进行排序时,如何对其进行调整,第二张纸上的数据更新。 当我只有一组镜像单元时工作的代码位于Sheet 1代码中: Private Sub Worksheet_Change_B2(ByVal Target As Range) Dim B2 As Range, B2_1 As Range Set B2 = Range("B2") Set B2_1 = Sheets("Priority Table").Range("B2") If Intersect(Target, B2) Is Nothing Then Exit Sub Application.EnableEvents = False B2_1.Value = B2.Value Application.EnableEvents = True End Sub 以及位于表2中的以下代码: Private Sub Worksheet_Change_B2(ByVal …

1
如何通过名称引用形状以及可以使用的其他内容。选择?
我使用MS Excel 2007 我的问题分为两部分 我有一个名为“Option1”的表单选项按钮 如何在其他宏中引用该按钮?我知道我可以使用它选择它:ActiveSheet.Shapes(“Option1”)。选择 但我真的只需要使用类似的东西 ActiveSheet.Shapes(“Option1”)这样做会在VBA中引发错误。 2.使用ActiveSheet.Shapes(“Option1”)。选择 是否有列表或资源显示.Select部分可以使用的其他内容?

1
自动目标搜索 - Excel
我一直在成功使用目标寻求回到一个已知的数字。这很好用几条线 - 现在我需要100s(可能是1000s)的线。任何帮助将不胜感激。 Col A =常数(已知) Col B =变量(未知) Col C = 1.5 * Col B(未知) Col D =变量* 2080(未知) Col E =(Col C * Col A)(未知) Col F = Col D + Col E(我一直在使用目标搜索并手动输入Col G#进入目标搜索) - 希望它能够提取Col G的编号 Col G =已知数字(即Col F中应该是什么)。 任何人都可以帮我自动化吗?

1
VBA EXCEL:在选择中循环遍历每个单元格时,查找方法不起作用
我正在尝试创建一个宏,在选择范围后,它将告诉我在样本中找到多少个20英尺或40英尺的容器。 宏基本上查找字符串“1x20”或“1x40”,当找到任何一个时,变量cont20或cont40将增加1。 我有的代码: Sub containercount() Dim count20 As Integer Dim count40 As Integer count20 = 0 count40 = 0 For Each cell In Selection If Not ActiveCell.Find("1x20", LookAt:=xlPart, MatchCase:=False) Is Nothing Then count20 = count20 + 1 End If If Not ActiveCell.Find("1x40", LookAt:=xlPart, MatchCase:=False) Is Nothing Then count40 = count40 …

2
使文本到列范围动态
我想在我的宏中使文本到列范围动态。但是,如果我尝试将myRange放在那里它不起作用。我无法在网络上找到任何信息来使文本到列动态。 原始(录制代码): Sub Macro3() Selection.TextToColumns Destination:=Selection, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 1), DecimalSeparator:=".", ThousandsSeparator:=",", _ TrailingMinusNumbers:=True End sub 编辑后(但无法使其工作): Sub Macro3() Dim myRange As Range Set myRange = Selection Selection.TextToColumns Destination:=myRange, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo …

1
用于下载所选邮件附件的宏 - 有关下载文件计数的问题
我更改了一些代码,以便将选定的邮件附件添加到我的硬盘中,如下所示: Public Sub SaveAttachments() Dim objOL As Outlook.Application Dim objMsg As Outlook.MailItem 'Object Dim objAttachments As Outlook.Attachments Dim objSelection As Outlook.Selection Dim I As Long Dim lngCount As Long Dim strFile As String Dim strFolderpath As String Dim strDeletedFiles As String Dim Counter As Long strFolderpath = "D:\attachments" If (Dir$(strFolderpath, …

1
将切片器选择添加到列表中的工作表 - Excel VBA
我有一个带有切片器的数据透视表,用户可以在其中进行多项选择。我试图在切片器中列出所选的值,以便它们可以使用CONCATENATE在另一个单元格中连接在一起。我正在使用下面的代码。 此时,单元格L5:L7填充了切片器中的第一个选择,但没有其他选择。 我做了一些研究,发现了一个可能的CUBESET功能解决方案,但我无法在我的电子表格中使用它。因此VBA尝试。有人知道它有什么问题吗? Sub City_Click() Dim cache As Excel.SlicerCache Set cache = ActiveWorkbook.SlicerCaches("Slicer_City") Dim sItem As Excel.SlicerItem For Each sItem In cache.SlicerItems If sItem.Selected = True Then Range("L5").Value = sItem.Name If sItem.Selected = True Then Range("L6").Value = sItem.Name If sItem.Selected = True Then Range("L7").Value = sItem.Name Next sItem End Sub

1
优选使用if / when样式条件自动化细胞运动
我想完全自动化清理导出数据的过程。我想要: 将溢出行中的数据移动到其预期列中。我在VB中尝试了以下代码。(这是尝试识别电子邮件中的@符号,并分别将所有电子邮件地址移动到右侧两个位置)。 子QWERTY ()昏暗d 作为范围,- [R 作为范围 设定d = 相交(ActiveSheet 。UsedRange ,范围(“d:d” )) For Each r In D If Left(r.Text, 2) = "@" Then r.Copy r.Offset(0, 1) r.Clear End If Next r End Sub 一旦数据在正确的列中,我需要自动移动到正确的行。我可以很容易地将它们向上移动,但如果一个联系人没有电子邮件地址(例如),那么当电子邮件向上移动时,电子邮件将排在错误的行中。

2
将值而不是范围传递给VBA功能
我正在Excel 2007中创建VBA函数。一个具有原型: Function ToLevelCode_Range(val As Double, ByRef R As Range) 我可以这样称呼它,并且得到正确的结果: =ToLevelCode_Range(B2, Categories!D1:D4) 有一个实例,我想让第二个参数成为一组特定的值: =ToLevelCode_Range(B2, { 0.38, 0.78, 1.18, 1.58 }) 结果为#VALUE,我什至无法到达函数中的第一个断点。 我正在以编程方式生成电子表格,并且数组中的值数量是可变的,所以我无法使用具有5个参数的函数来实现,等等。我不知道VBA是否具有可变参数列表语法,但是将是一个选择。 我该如何工作?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.