Tag: vba

VBA,高级筛选工作簿,跨工作表填充到公共列

我有许多列和标题的工作簿A,我想分开这些数据,并根据标题名称填充到工作簿B(工作簿B有4张不同的预填充列标题) 1)工作簿A(许多列),在列'AN'中对其所有唯一值进行过滤(即,列AN具有20个唯一值,但是对于每个唯一集合,每个列具有〜3000行)。 2)有工作簿B,预先填充4列的列,并非全部与工作簿A中的标题相同。以下是来自工作簿A的工作簿A的各个唯一值与它们各自的logging一起填充的位置。 这里的目标是用来自工作簿A的数据填充这4张表格,按照每个唯一列的AN值sorting,将其logging放入预填充的工作簿B. 这个代码到目前为止只是过滤我的主'AN'列,只是获得独特的价值观,我需要独特的价值观和logging。 Sub Sort() Dim wb As Workbook, fileNames As Object, errCheck As Boolean Dim ws As Worksheet, wks As Worksheet, wksSummary As Worksheet Dim y As Range, intRow As Long, i As Integer Dim r As Range, lr As Long, myrg As Range, z As Range Dim boolWritten As Boolean, lngNextRow […]

Excel VBA格式hex

我想将3位长的hex转换成6位数。 例如12F shd是00012F。 我试过这个代码,但它没有工作。 endadd = Format(endadd, "000000")

我可以在Excel中通过名称调用UDF函数吗?

我正在教我的学生在Excel中编写UDF,并让他们在一个模块中提交一个带有函数的Excel加载项。 它们都有标准的函数名称和inputvariables。 我试图find一种方法来轻松地编写一些应该返回已知解决scheme的函数调用,然后禁用我的加载项,并启用每个学生的加载项,以查看它们的代码是否正常工作。 但是,当我禁用我的加载项时,我创build的函数直接引用我的加载项文件,所以当我启用学生的加载项时,函数不会像我想要的那样引用学生的加载项他们来。 有没有人知道我可以做到这一点,而不必重新input每个学生的工作testing方程? 谢谢!

ADODB SQL语法 – 访问表内部使用Excel工作表join

我有一个项目,用户将需要填写一个Excel文件,然后将数据导出到Access数据库。 在Excel文件中收集的数据需要分三步输出:(1)导出数据集1logging;(2)查询新导入logging的主键(自动编号)的访问;(3)导出数据设置2个logging,其中包括填充为外键的主键。 我能够通过build立和打开一个ADODB连接来完成第一步。 但是,我在第二步遇到麻烦,我需要在Access表和Excel中进行内部连接。 wlodb.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\" &userSID & "\Desktop\WLO R&C Database_10-4-16.accdb" sqlFindREMPK = "Select ID " _ & "FROM [test1] a " _ & "INNER JOIN [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\User\RED-WIP.xlsm].[REM Upload$] b " _ & "ON a.[REM_ID_Database] = b.[REM_ID_Database] " _ & "WHERE (((a.[REM_ID_Database])=""REM9811044""));" WLOrs.Open sqlFindREMPK, wlodb ActiveSheet.Range("A10").CopyFromRecordset (WLOrs) 表和工作表名称具有相同的字段名称。 问题在于SELECT子句。 如果我按原样离开,我会收到一个错误消息,说该字段可能引用FROM子句中的多个表。 如果我添加如[test1]。[ID]这样的表名,那么我会收到消息说没有给出所需的参数值。 如果我将Excel字段名称稍微更改为ID1,并将SELECT子句保留为ID,则代码运行良好。

清理excel中的错误数据,用大写字母分割单词

我在Mac OSX上使用Excel 2011。 我有一个约3000条的数据集。 在包含名称的字段中,许多名称不会分开。 名字和姓氏之间用空格隔开,但是单独的名字是捆在一起的。 这就是我所拥有的(一个细胞): 格兰特MorrisonSholly Fisch 本·奥利弗·卡洛斯·阿尔贝托·费尔南德斯·厄本诺 本·奥利弗·卡洛斯·阿尔贝托·费尔南德斯·厄本诺 本·奥利弗 本·奥利弗 这是我想要完成的(一个单元格,逗号后用逗号隔开的逗号): Grant Morrison,Sholly Fisch,Ben Oliver,Carlos Alberto,Fernandez Urbano,Ben Oliver,Carlos Alberto,Fernandez Urbano,Ben Oliver,Ben Oliver 我发现了几个VBA脚本,将大写字母拆分单词,但我已经尝试过的将添加空间,我不需要他们这样的一个… Function splitbycaps(inputstr As String) As String Dim i As Long Dim temp As String If inputstr = vbNullString Then splitbycaps = temp Exit Function Else temp = inputstr For […]

使用VBA查找起始值,对行进行计数直到该值变为0并logging结果。 重复同一列直到数据到达

我是VBA /编码的一个新手,我通常的做法是粘贴预编写的代码,这对我的问题没有任何帮助。 我正在创build一个可以做3件事的macros: 请允许我find列中数据的起点。 一旦单元格值更改为常量,就开始计算行数。 一旦数值回到计数停止的起点,并logging在单独列中计数的单元格数量,并在计数的起始点定位该列中的计数。 重复,直到数据结束。 对于这种情况,起始点将是单元格的值大于0的时候。 它会增加到一个常数(300)。 一旦达到300,macros将不得不计数包含数值300的行数,直到该值回到0.在工作表的单独表格中的报告计数与在新表格中的相同相对位置处input的条目就像从数据开始计数一样。 最后是循环。 我也需要做一个类似的计数,但是在水平方向(即计算一列的列数)。 如果任何人都可以为上面的垂直/行数问题创build一个代码,我真的很感激它,如果你可以注释它,所以我可以尝试理解/学习哪些代码执行每个动作,从而改变它的水平/列计数。 我附上了电子表格的屏幕截图,但作为新用户,它必须作为链接。 蓝色突出显示的表是用于我正在谈论的垂直/行计数问题的数据。 突出显示的表格下方的空白表格已经手动input了第一列数据的正确答案,以便我不希望macros在我未准确描述我的请求的情况下执行该操作。 我还附加了水平表与正确的手动input答案行1在单独的表中列计数沿行。 最后,这里是我写的解决这个问题的代码,但它是非常基本的,不会运行。 Sub Count0() For Each c In Worksheets("Sheet1").Range("D30:D39") If c.Value = 0 Then End If If c.Value > 0 Then v = Range(c.Value) For i = 3 To Rows.Count If Cells(i, 1).Value <> v Then MsgBox CStr(i – […]

在VBA中创build一个颜色vector

我正在编写一个macros,通过多年的数据表来检查特定颜色的单元格。 不幸的是,这些年来人类吸食并没有一贯地select相同的细胞颜色(它们可能都与人眼相同,但具有不同的RGB值)。 如果我有一个内部颜色RGB(255,23,50)的单元格,有没有办法创build一个颜色vector来查看单元格的内部颜色是否落在上面? 我正在寻找创build一个向量+/- 15 RGB点,所以如果我正在寻找单元格与RGB(255,23,50)我想要一个向量之间的RGB(255,38,65)和RGB(240,8 ,35)。 我知道我可以使用IF语句来查看颜色是否在这两个值之间,但是如果我可以创build一个颜色vector,我可以使用它来获取更多的应用程序(如果需要的话,代码会更容易修改改变)。 这个if语句的作品: If ActiveWorkbook.Worksheets("Sheet1").Range("e5").Interior.Color >= RGB(240, 8, 35) And ActiveWorkbook.Worksheets("Sheet1").Range("e5").Interior.Color <= RGB(255, 38, 65) Then MsgBox ("yes") Else MsgBox ("no") End If 但是我正在寻找更多的东西: dim redVector as long ' or other appropriate variable type ' ***** code that defines the red vector ***** if range("e5").interior.color = redVector then ' […]

以编程方式打开工作簿时是否可以跳过文件validation?

我有一个大约100MB大的Excel文件,我打开这个代码,按下UserFormbutton时运行: Public Sub SelectButton_Click() fNameAndPath = Application.GetOpenFilename(Title:="Please Select a Report") If fNameAndPath = False Then Exit Sub End Sub 由于这个文件非常大,在打开之前需要一段时间才能validation,而且这个validation占了我整个macros完成时间的一半左右(我在Excel 2013中工作,并且这个文件没有从networking打开或共享驾驶)。 如果我手动打开文件,那么在validation三秒钟后,我可以select跳过validation。 这个问题是它打开受保护的视图中的文件,我无法使用它。 使用VBA,有没有一种方法来“强制跳过”这个耗时的validation,同时避免受保护的视图? 当Excel完全closures时,此警告/指引将显示在开始启animation面的左下angular: 当Excel已经打开时,这个警告/指南出现在右下angular:

一次只复制2列以前的单元格吗?

可以同时复制两列的单元格值(两列=string中的值不同)。 现在我正在分开做。 1: Do Until ActiveCell.Row >= LastRow If Trim(ActiveCell.Offset(1, 0)) = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell End If ActiveCell.Offset(1, 0).Select Loop 然后又是第三列 Cells(FirstRow + 2, 2).Select Do Until ActiveCell.Row >= LastRow If Trim(ActiveCell.Offset(1, 0)) = "" Then ActiveCell.Offset(1, 0).Value = ActiveCell End If ActiveCell.Offset(1, 0).Select Loop 其实我编码如下,它同时进行,但有一个缓慢,它缓慢 Sub Kopi() Dim i, y As […]

有条件的内部联接语句(VBA / SQL)生成多个值

我很新的VBA / SQL,我试图执行一个条件的内部联接。 我有两个共同列的表(“CRM”和“CodeCRM”),当table1(“Flux”)触发某个事件(CodeBlocage = 101)时,我希望从table2(“服务台”)获得一个电子邮件地址以将其添加到自动电子邮件。 Dim StrDestinataire As String Select Case Strtable Case "Flux", "GAFIJOUR" Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim Y As String Dim sSql As String Set cn = CurrentProject.Connection sSql = "Select AddMailCRM from Desks Inner Join Flux on Desks.CODECRM = Flux.CRM WHERE Flux.CODEBLOCAGE = '101'" Set rs […]