Questions tagged «vba»

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

1
从单元格复制时删除双引号
问题: 将包含“脚本”的单元格从Excel复制到另一个程序时,""会自动添加双引号(),而不是仅添加单引号(")。 另外,在脚本的开头和结尾处"会自动添加a。 这是我的脚本,强调的引号是多余的引号: “ //通过脚本按星期几更改预算// Jon Gritton 2016 //用户乏VAR BUDG_NAME = “ ”共享预算S104(CX -高)“ ” ; var B_MON = 500000; var B_TUE = 500000; var B_WED = 500000; var B_THU = 500000; var B_FRI = 500000; var B_SAT = 500000; var B_SUN = 500000; 函数main(){setBudget(getBudgetToday()); } 函数getBudgetToday(){var budgArray = …

2
如果单元格不为空,如何复制前一行不同列中的值?
我有以下情况: A B 19260218 234 77 ok 3 ok 19310328 174 46 2 当B列中的值是数字时,我有一个条件格式,整个行都被染成红色。如果可能,我在vba中需要以下内容: 如果B列中的值是数字并且A列(在同一行)为空,则将先前遇到的值从A列复制到目标行。在这种情况下(不计算标题):B2 =数字AND A2 =空,因此将A1复制到A2 B4也是数字,但由于A4不为空,因此无需复制任何内容。 对于行数发生变化的整个工作表,这可能吗?如果是这样,怎么办? 谢谢您的帮助。如果需要进一步说明,请随时提出。

0
高效的Vlookup值400k行x 10列-数组吗?
预先感谢您为我提供帮助。我有一个数据集(400k行x 10列),需要在5个不同选项卡上的另一个工作簿中查找值。我应该如何设置以获得最大效率? 我猜我应该使用数组,但是我试图将数据集放到数组和vlookup中,这非常慢..有什么建议吗? Sub KSB1_Macro_Remodeled() 'Declare all variables ' 'Numerical Dim i As Long 'Objects - all global 'Reference File Arrays Dim POsWBN As Variant Dim WOsWBN As Variant Dim MSRMapping As Variant Dim FieldMapping As Variant Dim GL As Variant Dim DocDates As Variant Dim MP40 As Variant Dim …

1
如何编写在另一个工作表中查找单元格中列标题的VBA代码,然后返回相应的列?[关闭]
因此,我有一个完整的客户电子表格,其中客户作为列,产品作为行,交叉单元格指示每个客户购买了多少。在另一个工作表中,我希望能够运行一个宏,该宏将提取所有产品并列出仅为一个客户购买的数量。 我还有另一个宏,用于删除空白行,仅保留客户购买的产品。

1
修改Excel宏以引用文本列表,而不是硬代码
我正在尝试获取有关我一直在努力的Excel宏的最后一步的帮助。我已经设置了一个宏,该宏将从两个不同的工作簿中获取工作表中的数据,并将其粘贴到第三个工作簿中。 第三本工作簿是归因于15个不同雇员的15个文件之一,每个文件都有不同的名称和编号。 我设置了宏以一次打开和更新15个工作簿中的每个工作簿,然后保存并关闭它们,但是现在我需要容纳对15个工作簿的更改(对于员工辞职或新雇员)被雇佣)。 以我编写宏的方式,我必须手动进入代码并将引用更改为15名员工的姓名和ID号。 有没有一种设置它的方法,以便它可以从列表中读取名称和编号(保存在第四个工作簿中),这样我就可以根据需要简单地编辑该列表,并且宏可以保持不变并在循环上运行?我知道我每次必须进行更改时都可以使用“替换”,但是从单个可编辑列表中进行操作仍然会更容易。谢谢。 在下面的示例中,引用了名为Melvin Smith ID#2878的员工: ‘ Using the AutoFilter on the workbook called NEW DD Windows("NEW DD.xlsx").Activate ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:=”=*Melvin Smith*”, _ Operator:=xlAnd Selection.Copy ‘ Going back to Melvin’s workbook named 2878 Windows("2878.xlsx").Activate Sheets("D dd N").Select Range("A1").Select ActiveSheet.Paste

1
VBA代码未“保留”此工作表参数
我想从另一工作簿中检索值的一列,并在当前工作簿中填充一个选项卡。最终,这将进入我编写的效果更好的更长的模块。我只是想让这一步自动化。下面是代码。 我得到一个标超出范围在贴线错误。似乎我的语句设置currentWb为ThisWorkbook不起作用,因为要从中复制的第二个工作簿仍处于打开状态,选择并复制了范围,只是在等待目标粘贴。我已经搜索并尝试了所有我能想到的。 Sub OpenWorkbookToPullData() Dim sUserInput As String sUserInput = InputBox("Enter Account Folder Name:", "Folder Name") Dim path As String path = "C:\users\" & Environ$("username") & "\OneDrive\Documents\Brightree\" & sUserInput & "\Financial Scorecard\Exceptions.xlsm" Dim currentWb As Workbook Set currentWb = ThisWorkbook Dim exceptionWb As Workbook Set exceptionWb = Workbooks.Open(path) Dim exceptionWs …

1
由于SAP BI更新而发现文件(xlsx)之间的差异
我正在为前端dwh(SAP BI 4.2-> 4.3)测试新版本。我意识到导出的excel文件现在似乎工作方式有所不同。它们仍然是.xlsx文件,外观相同,但是在粘贴数据时,现有的vbs脚本不再起作用。始终发生的错误是: 此操作不适用于多项选择 发生此错误的一个简单的代码示例是: For i = 4 To 29 objInput.Worksheets("Worksheet").Range("D"&i&":M"&i).Copy objWorkbook.Worksheets("Worksheet").Range("D"&i&":M"&i).PasteSpecial -4163, -4142, False, False 单元格只有数字,仅此而已。并且始终是PasteSpecial行导致错误。 就像我说的那样,我在导出的excel文件(4.1与4.2)中找不到任何区别,但是我发现在一种情况下,“新”文件的大小为19kb,而旧文件(适用于脚本)为19kb 18,9kb。 有没有办法找出两个文件之间的区别?还是有人知道为什么现在正在发生vbs中的错误?

1
从另一个工作簿中调用一个函数
我在一个工作表中有一堆数据,我试图根据几列中的值保存到单个工作簿中。我采用的方法(无论好坏!)是将相关的工作表(和宏)复制到新的工作簿中,并用适当的名称保存(例如“ temp.xlsx”),然后清理其中的数据。通过删除不相关的行(称为deleteInfo的函数)来创建新工作簿。根据公司政策,所有这些都必须在不更改原始工作簿的情况下完成。 我可以毫无问题地复制内容,但是那时在新工作簿中调用宏时遇到了严重的问题。 我努力了: Application.Run "'temp.xlsx'!deleteInfo" ActiveWorkbook.Application.Run deleteInfo Application.Run ("'C:\user\.....\temp.xlsx'!deleteInfo") 但没有一个奏效。 任何帮助深表感谢。

1
Excel VBA:与多个名称范围相交的方法
相交不起作用。 Dim NTit作为范围Dim NInf作为范围Dim NDat作为范围 昏暗的WS作为工作表集WS = ActiveSheet Set NTit = WS.Range("$A$1:$J$1") Set NInf = WS.Range("$B$3:$F$3") Set NDat = WS.Range("$A$5:$K$11") NTit.Interior.Color = RGB(255, 0, 0) If Not Intersect(Target, NTit, NInf, NDat) Is Nothing Then

0
Excel VBA:当用户窗体中的任何复选框值更改时,如何运行代码?
当用户窗体中的任何复选框值更改时,如何运行代码? 我正在尝试使用类模块,但是代码以我不理解的奇怪方式运行。 仅当且仅当_Change()事件的代码中设置了断点时,该代码才会认识到复选框的值在其第一次出现时已更改。在所有其他实例中,它不再识别任何更改。 这是我在Userform_Initalize()中的代码 Private Sub UserForm_Initialize() Dim ckCollection As New Collection Dim ctrl As MSForms.Control Dim obj As clsCheckBoxes For Each ctrl In Me.Controls If TypeOf ctrl Is MSForms.CheckBox _ And Not TypeOf ctrl Is MSForms.OptionButton _ And Not TypeOf ctrl Is MSForms.ToggleButton _ And Not ctrl.Name = "ckEditFileDescription" …

0
默认情况下仅打印来自eBay和PayPal的电子邮件的第一页
我在eBay上买了很多东西上班,必须打印Outlook的订单确认和PayPal收据电子邮件才能提供给帐户。每次,我都必须更改Page range为1,因为总有第​​二页上有一行或两行垃圾-浪费纸张。不过,我办公室中的其他人会更健忘,只需单击即可Print。 是否可以将Outlook默认设置为仅打印来自eBay和PayPal的电子邮件的第一页?也许使用VBA? 我们使用的两台计算机分别运行Outlook 2003和2013。

1
需要在以+号分隔的可编辑单元格中分割一行文本
我需要一个VBA代码在由+号分隔的可编辑单元格中拆分一行文本,然后将拆分后的文本分别放在一列中,同时保持原始单元格不变。另外,我需要在更换单元时自动更新。我浏览了许多帖子,但找不到可以回答此问题的帖子。 以下是到目前为止我尝试过的代码: Sub NameTest() Dim txt As String Dim i As Integer Dim FullName As Variant txt = ActiveCell.Value FullName = Split(txt, " ") For i = 0 To UBound(FullName) Cells(1, i + 1).Value = FullName(i) Next i End Sub

1
Excel 2007-仅在默认情况下尝试复制和粘贴值并在vba中删除源
我正在尝试找到一种仅使用特殊值剪切和粘贴的方法。从我到目前为止所读的内容来看,这似乎是不可能的。因此,我发现的另一种方法是使用vba,仅在我的电子表格上复制和粘贴值。现在,我想添加一行以在粘贴后删除源。 这是到目前为止我发现的(抱歉,我对vba完全陌生)。 Sub PasteAsValue() Selection.PasteSpecial Paste:=xlPasteValues End Sub 然后在宏名“ PasteAsValue”下输入快捷键ctrl + v 谢谢您的帮助。

1
R1C1代码不太起作用
我试图用公式中的变量写入循环内的某些单元格。 相关行如下所示: Worksheets("Judaspriest").Cells(p, 7).FormulaR1C1 = "=Sum(G" & Cut & ":G" & p & ")" 在工作表中,尽管单元格中的公式显示为: =SUMME('G2':'G109') 如何摆脱“”。 谢谢

1
当我单击按钮时,宏可按顺序从列中填充单元格
我很难解决这个问题。 这是我的布局: 如您所见,我有2个按钮。 我希望每个按钮都可以执行以下操作: 每次单击YES,它将Y在特定范围的单元格中插入一个。 如果YES再次单击,它将自动Y在同一列中上一个单元格的下一个单元格中插入一个。 如果单击NO,它也将继续在列中向下插入N。 如何使按钮的输出始终使用下一个空闲单元?

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.