Questions tagged «vba»

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

0
工作表_更改为工作表_计算
我需要帮助将我的原始代码问题重写为worksheet_calculate。我是新来的,努力学习,但是被困在这一门上。 当我使用Calculate代替更改时,代码会引发许多错误。我读了一些有关添加子例程的评论,但我做不到。 Private Sub Worksheet_Change(ByVal Target As Range) 'Update 20140722 Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.ActiveSheet.Range("AD:AD,AB:AB"), Target) xOffsetColumn = -1 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Rng.Offset(0, xOffsetColumn).Value …

1
当值更改时,VBA仅在可见的单元格中在D列中添加空白行
我希望我的VBA代码在d列中的单元格值更改时插入两个空白行。而且由于我使用了一些自动过滤器,所以我只希望它在可见的单元格上执行此功能。 我有这个: Dim GCell As Range SearchText = "" Set GCell = Cells.Find(SearchText).Offset(0) GCell.EntireRow.Insert GCell.EntireRow.Insert 但是,仅当您输入要搜索的特定文本时,它才有效。但是这里我没有要搜索的特定内容。这只是数字

2
如何在此VBA代码中更改目录?VBA“ Excel到TXT或CSV”
我真的想更改此代码的目录,Application.ActiveWorkbook.Path但我不知道将其放置在哪里。 Public Sub CharacterSV() Const DELIMITER As String = "|" Dim myRecord As Range Dim myField As Range Dim nFileNum As Long Dim sOut As String nFileNum = FreeFile Open ActiveWorkbook.Name & ".txt" For Output As #nFileNum For Each myRecord In Range("A1:A" & _ Range("A" & Rows.Count).End(xlUp).Row) With myRecord For …

1
仅连接唯一值
我有这个功能 Public Function CONCATENATESPECIAL(rng As Range) As String Dim rng1 As Range CONCATENATESPECIAL = "" For Each rng1 In rng If (Not Rows(rng1.Row).Hidden) And (rng1.Value <> "") Then CONCATENATESPECIAL = CONCATENATESPECIAL & rng1.Text & "|" End If Next rng1 End Function 它基本上将某个范围内的值与“ |”连接。 我需要的是-是否可以对其进行编辑-如果在该范围内存在一些重复值,则仅将其包含一次?总结-仅连接唯一值。 提前致谢

1
Excel VBA - 返回一列中未找到的值列表
我想让Excel VBA在消息框提示符中返回列中的所有项目 一个 工作表 Mastersheet 但不在列中 一个 工作表 DeliverySheet 。 找出这个有很多麻烦,这是我到目前为止所得到的: Private Sub CommandButton5_Click() Dim DeliveryName As Range Dim MasterName As Range Dim MasterSheet As Worksheet Dim DeliverySheet As Worksheet Dim valueToFind Set MasterSheet = Sheets("Delivery Master List Drop") Set DeliveryName = Sheets("For Delivery").Range(Sheets("For Delivery").Cells("A:A")) Set MasterName = Sheets("Delivery Master …

0
Excel VBA宏已消失
想要同时查看代码窗口和电子表格。在XL VBEditor,拖动代码窗口,项目窗口和屏幕上的属性周围完成此操作。按下一些切换按钮,例如查看代码,显示/隐藏文件夹,看看他们做了什么。 注意到所有模块仍然在项目窗口中列出,但是当单击任何一个模块名称时,模块上缺少宏例程。在大多数情况下,一些注释和代码'Option Explicit'仍然可见,但所有的宏=子程序都消失了。 更令人困惑的是:有时如果删除代码行'Option Explicit',该特定模块上的宏会重新出现。 最让人困惑的是:如果我找到一个显示一个宏的模块,我可以尝试在该模块上编写另一个宏。当我完成在最后一行形成Sub NewMacroName()和End Sub的宏#2时,第二个宏存在,但第一个宏消失了!删除Sub#2和Sub#1重新出现 宏显然是隐藏的,实际上并没有消失。如果我打开对象浏览器,我可以看到全局类列表(每个类都是一个编码模块)。如果单击一个Global Class,我会看到一个Class Members列表(每个都是一个子例程)。在这种配置中工作是不可能的,但是它会非常不方便。回到原始配置将是一件幸事。 试图与微软讨论这个问题,但是30分钟后,一位服务人员回来说今天没有人回答,再试一天。 安装:Windows 10是最新的,惠普笔记本电脑少了6个月,Excel来自Office 2019,虽然Excel 2010中有很多宏/模块。在我开始移动窗玻璃之前,一切都很好。 附录: 1-其他工作簿要么看不到Personal.xlsb工作簿,要么看不到Personal中的特定宏例程。 2- VBA问题由Microsoft的商业部门处理。终于在今天与他们交谈了。微软要求每个事件499美元来考虑任何问题,或者更昂贵的年度合同。 在此先感谢您的有用见解。看起来像Excel VBA的行尾。

1
宏根据条件将行的特定列复制/粘贴到新工作表中
这是我的第一篇文章,请耐心等待。 我正在使用代码(来自此站点)查看特定工作表的A列中的列表,并从此列表创建/命名新工作表(如果它们尚不存在)。它还将具有匹配名称的行中的数据复制到各自的表中。 我想知道的是如何更改代码,以便不是将整行复制到新工作表,而只是复制列A:P。我真的很感激任何帮助。这是代码: Sub yearAssign() Application.ScreenUpdating = False On Error GoTo SheetError sheetname = "initial" Dim wkb As Workbook Dim wks As Worksheet Dim wks1 As Worksheet Set wkb = ThisWorkbook Set wks = Sheets(sheetname) totalsheets = wkb.Worksheets.Count For i = 1 To totalsheets Set wks1 = wkb.Worksheets(i) thename = …

1
如何将宏推广到任何行
下面的Excel宏被编写为在Excel的特定行(第2行)上运行。我希望能够将它应用到我选择的任何行而不仅仅是第2行。有谁知道如何适应它?我有这个为我写的,不知道任何VBA编码。 Sub test() Set ie = CreateObject("internetexplorer.application") ie.Navigate "http://www.fedex.com/us/" While ie.Busy Or ie.ReadyState <> 4: DoEvents: Wend ie.Visible = 1 Set doc = ie.document On Error Resume Next With doc .getElementsByname("username").Item(0).Value = "Username" .getElementsByname("password").Item(0).Focus .getElementsByname("password").Item(0).Value = "Password" .getElementsByname("startpage").Item(0).selectedindex = 1 .getElementsByname("login").Item(0).Click While ie.Busy Or ie.ReadyState <> 4: DoEvents: Wend Application.Wait …
-1 vba  macros 


1
根据criterea删除单元格范围
我有一个包含多个宏的Excel文件,用于数据处理。主文件读取一个或多个.csv文件,并将所需的所有数据复制到主文件中的选项卡(我们称之为sheet1)。经过一些处理后,新数据将被复制到第二个选项卡(sheet2)中,并清除sheet1。Sheet2包含之前已读出的所有数据。 sheet1的F列包含特定事件的日期,该日期将传输到sheet2中的E列。 我想做的是检查工作表之间的重叠日期并删除包含它们的行,因此sheet2中没有双重条目。

1
MS Outlook 2016 VBA - Application.ActiveExplorer.CurrentFolder - 似乎不起作用(它在OL2007中有效)
几年前我将一些特定的VBA代码复制到outlook 2007中。它在我选择的当前文件夹上运行我的规则。该公司刚刚升级到Outlook 2016(办公室365),虽然保留了VBA代码(在“ThisOutlookSession”中)但它不再有效。 是否存在一些不再支持的VBA代码? Sub RunAllInboxRules() Dim st As Outlook.Store Dim myRules As Outlook.Rules Dim rl As Outlook.Rule Dim runrule As String Dim rulename As String rulename = "DBLP RULE" Set st = Application.Session.DefaultStore Set myRules = st.GetRules Set cf = Application.ActiveExplorer.CurrentFolder For Each rl In myRules If rl.RuleType = …

1
将多个Excel工作表转换为.csv
我发现这个宏用于将工作簿中的多个excel工作表转换为单个命名的.csv文件,但不知道如何从转换的文件名中删除工作簿名称。我确信这很简单,但我对VBA一无所知。 Sub exportcsv() Dim ws As Worksheet Dim path As String path = ActiveWorkbook.path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) For Each ws In Worksheets ws.Copy ActiveWorkbook.SaveAs Filename:=path & "_" & ws.Name & ".csv", leFormat:=xlCSV, CreateBackup:=False ActiveWorkbook.Close False Next End Sub

1
从excel表中提取值以构建图形
我将风险登记表显示为excel表。我想提取对应于特定KRA值的条目,并在图表上绘制其最大值。我需要将该方法设置为自动,以便对风险寄存器进行任何添加都会导致图形更新。 例: 对于所示的风险登记册,我将在标有“技术”,“基础设施”和“灾难(海啸)”的雷达图上有3个轴,每个轴具有相应的值16,8和5(每个KRA的最大总评级)。我该怎么做呢? PS:我一直在尝试使用Vlookup公式(但是获取单元格引用错误)和match-index(不会自动更新),但我欢迎任何使用VBA的答案。 我的公式是(出现在另一个工作表中): 在单元格A1中:=VLOOKUP("Technology",tblRiskRegister[Key Risk Area (KRA)],tblRiskRegister[Total Rating])即使我将其作为数组公式输入(Ctrl + Shift-Enter),也会出现单元格引用错误

1
如何使此宏捕获最新数据?
我记录了一个宏及其工作原理。问题在于它捕获了绝对单元而不是动态单元。让我解释。 我有一个将灯具复制到的估算页面。在其中一个单元格中,它将是A或B或C ...等。当我记录宏时,当我在A选项卡上时,它将捕获绝对数据(如A),但是当我加载了B选项卡,宏放入了“ A”。因此例程如下。我将大胆地展现我所需要的动态。 Sub FixColumns() ' ' FixColumns Macro ' ' Range("A1").Select ActiveCell.Offset(1, 15).Range("A1").Select ActiveCell.FormulaR1C1 = "=Estimating1!R[3]C[-10]" ActiveCell.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ActiveCell.FormulaR1C1 = **"C"** ActiveCell.Select Selection.AutoFill Destination:=ActiveCell.Range("A1:A38"), Type:= _ xlFillDefault ActiveCell.Range("A1:A38").Select ActiveWindow.SmallScroll Down:=-45 ActiveCell.Offset(0, -14).Range("A1").Select ActiveCell.FormulaR1C1 = "=Estimating1!R[8]C[3]" ActiveCell.Select Selection.Copy Selection.PasteSpecial …

1
如何删除参考并在每台机器上使用vba代码?
正如您所建议的那样,我已经进行了更改,但仍然无法使其变得用户友好,或者您可以说每次必须使用此代码时,都必须在不同计算机上打开脚本运行时。 请提出建议并尽快更正我的代码 Sub GetFileNamesandPageCount() Option Explicit Public fs As Object Dim diaFolder As FileDialog Set fs = CreateObject("Scripting.FileSystemObject") Dim i As Integer Dim fld As Object Dim T_Str As String Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker) diaFolder.AllowMultiSelect = False diaFolder.Show If diaFolder.Show = -1 Then T_Str = diaFolder.SelectedItems(1) Else Set diaFolder = …
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.