Tag: vba

如何在Excel中存储一个额外的(隐藏)信息与单元格

我正在撰写一份工作申请,将一大堆不同的电子表格编译成特定工作地点的报告。 我有很多的工作表,每个都有一大堆指标。 每个工作表上的每个指标可能需要从不同的工作表编译,并通过查找关键字在工作表上find。 另一个问题是,这些电子表格中的一些措辞会定期更改,以更好地反映行业标准,所以我不能只用关键字来search。 所以我正在寻找一种方法来存储元数据以及一个单元格,我可以隐藏用户,所以他们不会意外删除它,但可以轻松地从VBA访问,以便根据需要进行更改(我会写一个过程来做到这一点如果需要的话)。 研究表示,我可以使用评论(尽pipe我不确定是否可以从vba访问这些评论,并且希望将它们隐藏起来),也可以使用隐藏的工作表来反映每个我使用的工作表以及给定单元格中的信息工作表。 我可能会用后者,但它不是完美的。 任何其他的想法? 为了清楚起见编辑:我需要一个string与单个单元格关联,这将指向我如何find适当的数据。 例如:“查看工作簿1 – % – search此文本”。 @Andrew提到的VeryHidden属性可能是最好的方法,因为我不认为有一种方法将variables附加到单元格。

VBA按空格拆分string

我想要一个可以调用并传入单元格的excel函数。 input: Firstname Lastname email@mail.com Firstname midname Lastname email@mail.com 中间的空格是随机的。 输出应该只是一个数组。 数组可以有任何长度,因为我不知道string是什么样的。 输出应该是: Firstname, Lastname, email@mail.com Firstname, midname, Lastname, email@mail.com 我将从一个单元格中调用该函数,如=MySplitFunction(A1) ,并且应该将A1中的Firstname,B1中的Firstname和C1中的email@mail.com。 我创build了一个新模块并尝试了下面的代码: Function MySplitFunction(s As String) As String() MySplitFunction = Split(s, " ") End Function 这给了我输出 Firstname 我如何得到它返回整个数组? 甚至有可能在一个单元格中写入一个函数,这个函数会把东西放在靠近它的单元格中? 编辑:

使用Excel VBA按列值对工作表数据进行sorting

我有vba开发下一个用户表单,它从工作表中获取信息来显示信息 我想要通过Segment命令所有的信息,这是代码: Function llenarDatosTabla() Dim vList As Variant Dim ws As Worksheet: Set ws = Worksheets(BD_PRODXSIST) ListBox1.Clear With ws If (IsEmpty(.Range("AA2").Value) = False) Then Dim ultimoRenglon As Long: ultimoRenglon = devolverUltimoRenglonDeColumna("A1", BD_PRODXSIST) vList = ws.Range("AA2:AA" & ultimoRenglon & ":AL2").Value If IsArray(vList) Then Me.ListBox1.List = vList Else Me.ListBox1.AddItem (vList) End If End If Me.ListBox1.ListIndex = -1 […]

如何在VBA中结束无限的“更改”循环

我有一个视觉基本问题。 我想做一个macros/函数,将乘以我input的数字3,并给出一个结果在同一个单元格。 我尝试了这样的事情: Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$Q$21" Then Target.Value = Target.Value * 3 End If End Sub 但它不起作用 – 我得到的结果像“xE25”,因为它不断倍增。 我希望在第一次迭代之后停止工作,或者只在按下“enter”键而不是在单元格中进行任何更改时才工作。 把结果放在不同的单元格中是很容易的,但这不是我的观点。 – – -编辑: 我编辑了“如果”行来: If (Target.Column = 5 Or Target.Column = 11 Or Target.Column = 17 Or Target.Column = 23) And (Target.Row >= 19 And Target.Row <= 24) […]

我可以在Word或Excel中创build撤消事务吗? (VSTO)

我注意到Project 2007的function允许撤销的操作被放置在单个堆栈项目中,或“撤销事务”。 例如: Application.OpenUndoTransaction "Create 6 tasks" Dim i As Integer For i = 1 To 6 ActiveProject.Tasks.Add "UndoMe " & i Next Application.CloseUndoTransaction 这意味着用户可以撤消所有的动作,而不是6次。 这将是伟大的Word和/或Excel中实现,因为我正在做一些事情在VSTO,一次做多个更改,这将是一个恼人的用户,如果他们必须点击撤消多次,如果他们犯了一个错误。 虽然这些特定的function似乎不存在,有没有人知道是否/如何以某种方式做到这一点?

Excel编程方法

在UDF,macros,加载项,自动化加载项,XLL或VSTO之间的Excel编程有什么区别。 我应该使用哪一个,在哪种情况下?

在VBA中读取包含date时间的Excel单元时出现问题

一些背景:对于我正在处理的项目(从给定的客户数据excel电子表格构buildXML DOM),我需要能够读取其中包含date时间的单元格的内容。 有问题的单元格包含“7/22/2011 0:00”,当我右键单击格式化单元格时,它会告诉我类别是“自定义”(不在标准date类别中),types为“m / d / yyyy h:mm。“ 然而,当我select单元格时,公式窗格将其显示为“7/22/2011 12:00:00 AM”。 所以这三种分类数据types的尝试都不匹配。 问题:当我使用MsgBox中的ActiveWorkbook.ActiveSheet.Cells(x,y)来显示单元格内容以进行debugging时,它仅显示2011年7月22日(切断时间)。 它不能是date和时间之间的空间,因为我成功读取了电子表格中其他位置的空格。 任何人都可以告诉我为什么发生这种情况,或者指向一个VBA / Excel方法的正确方向,而不是做Sheet.Cells(x,y)这种奇怪的裁剪工作? 谢谢。 如果只有我有一个便士每次date时间数据types导致我的问题..

将date格式更改为yyyy-mm-dd

我有一个包含混合格式date的date列。 例如: 一个 1990年3月21日 1990年3月21日 所以,基本上在一列中有两种不同的格式: dd.mm.yyyy和mm/dd/yyyy 。 我正在尝试编写一个VBA脚本,将列中所有date的格式更改为yyyy-mm-dd 。 这就是我到目前为止: Sub changeFormat() Dim rLastCell As Range Dim cell As Range, i As Long Dim LValue As String i = 1 With ActiveWorkbook.Worksheets("Sheet1") Set rLastCell = .Range("A65536").End(xlUp) On Error Resume Next For Each cell In .Range("A1:A" & rLastCell.Row) LValue = Format(cell.Value, "yyyy-mm-dd") .Range("B" & i).Value […]

从Excel VBAmacros执行.bat文件

我有一个与我的Excel VBAmacros的问题。 我需要它执行与Excel工作簿在同一文件夹中的batch file。 代码有时运作良好。 我不知道是什么造成的错误。 代码如下: Sub writebatch() Sheets("code").Select Application.DisplayAlerts = False ActiveWorkbook.SaveAs FileName:=ThisWorkbook.path & "\code.bat", FileFormat:=xlTextPrinter, CreateBackup:=False Application.DisplayAlerts = True ThisWorkbook.Saved = True Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat" Application.Quit End Sub 它写入batch file,但不执行它。 只有一次我得到命令窗口不closures,它说code.bat文件找不到。 所以changedir命令起作用了。 是否可以运行cmd.exe并运行相对path的code.bat而不必更改?

如何在VBA中使用FileSystemObjectreplace一行文本文件中的string?

我正在尝试使用FileSystemObject方法在文本文件中查找特定的行,并在该行内replace特定的string。 我相对比较新,因为我目前的代码有excel打开文本文件,并取代我需要它replace然后保存并closures它。 这种方式不再是一个选项,因为有excel打开文本文件需要很长时间,并支持文件。 这是我到目前为止已经有多远了。 – Sub FindLines() Const ForReading = 1 Set FSO = CreateObject("Scripting.FileSystemObject") Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", ForReading, False) Do Until objFSO.AtEndOfStream = True go = objFSO.ReadLine If InStr(1, go, "ant", vbTextCompare) > 0 Then bo = Replace(go, "t", "wow") End If Loop objFSO.Close Set objFSO = FSO.OpenTextFile("C:\Users\Carella Home\Desktop\boomboom.txt", 2) End Sub […]