Tag: vba

VBA比较多个variables

有什么办法来比较VBA中的多个variables? 例如: Dim x As Integer Dim y As Integer Dim z As Integer x = 99 y = 2 z = 3 我想返回最小的值。 我知道我可以使用select case x > y所有可能的排列组合,但是对于超过3个variables来说似乎很难处理。 我已经尝试了工作表函数 solution = Application.WorksheetFunction.Min(x, y, z) 但返回2 ,我希望它返回variables名称传递给另一个函数。 非常感谢, 编辑:我很抱歉,如果这是混乱,我仍然是一个VBA新手。 这是我的问题更普遍一点: 我有一个对应于名称的代码列表,每个代码有很多名字。 我想遍历每个代码的每个名称,并计算名称出现在列表上的实例的数量,并select具有最less出现次数的名称。 (可以是0或可以与其他名称相同)。 显然如果有2个名字,那么if x>y then很容易做,但是我比较难以比较3。

Excel的VBA不会保持领先的零

我似乎无法find一种方法来保存我的VBA代码中的前导零。 零是必要的,因为它们对应于唯一的ID。 我已经尝试将数字格式更改为文本和0000 ….在Excel中和我的实际代码中的相同方法:ActiveSheet.Cells(i,j).NumberFormat =“00000” 还有其他build议吗? (如果我手动input这些数字到VBE它也剥离了前导零)。 编辑: Sheets.Add.Name = "Temp" Sheets("Sheet1").Select ActiveSheet.Cells(2, 2).NumberFormat = "000" cid = Cells(2, 2) MsgBox cid Sheets("Sheet2").Select ActiveSheet.Cells(6, 1).NumberFormat = "00000" sid = Cells(6, 1) Sheets("Temp").Select Url = _ "URL;" & _ "http……asp?" & _ "X1=" & cid & "&" & _ "X2=" & sid & "&" 这是最终在一个循环内,但我正在debugging作为单独的迭代。

以编程方式启动Excel的“信任中心设置”对话框

我需要用户单击“信任访问VBA项目对象模型”,以便我正在构build的应用程序可以帮助他们将代码导入到VBE。 我可以显示一个消息框或者提供文档告诉他们如何改变设置(如果有的话,还有关于反响的警告)。 但是,这个设置仍然埋在Excel用户界面中5次点击…事实上,即使我不记得在哪里find它。 所以我想要做的是以编程方式为他们打开窗口。 我可能可以使用臭名昭着的SendKeys方法,但我想知道是否有更好的方法… (我看到,实际上可以通过使用VBS脚本来为用户设置对用户的VBA项目对象模型的访问权限,以便在目标Office应用程序没有按照此MSDN文章运行时更改该键值,但是我更愿意用户手动启用此选项或select不)。 编辑:VBA 或 VSTO解决scheme是好的,或任何你能想到的。

如何在vba中保存为.txt

我期待有我的macros保存一个新的工作表,我创build一个.txt文件。 这是迄今为止的代码。 Sub Move() ' ' Move Macro ' ' Keyboard Shortcut: Ctrl+m ' Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Workbooks.Add ActiveSheet.Paste ActiveWorkbook.SaveAs Filename:="e:" & _ "HDR" + Format(Now(), "YYYYMMDDhhmmss") & ".txt" End Sub 这包括我的macros。 我在保存为.txt文件的最后一部分遇到问题。 我目前得到一堆垃圾在我的.txt文件,这里是一个例子, “PK!”} {Content_Types] .xml¢(ÌTΝΝΝ07â-1)ââïïïïïïïïïïïïïïïïïïïï¿ 任何帮助将是伟大的。

Filecopy与名称function? 区别在哪里?

我发现了两种不同的方法来使用VBA在Excel中复制单个文件。 一个是文件复制: FileCopy (originalPath), (pathToCopyTo) 另一个是名字: Name (originalPath) As (pathToCopyTo) 性能/预期的使用/function有何差异? 我没有注意到任何东西,但有兴趣知道!

如何通过C#代码从文本文件加载VBAmacros到Excel文件?

我的C#代码必须创build一个带有两个工作表的Excel文件,并在那里输出一些数据。 除了数据列之外,Sheet 1还必须使用VBAmacros来启用,这将允许用户在点击特定单元格时使用提供的数据执行一些math计算。 这个VBAmacros存储在一个文本文件中,如C:\VBA_MACROS\VBA1.txt. 现在我可以手动做,即 C#代码创build一个Excel文件并用数据填充它。 我在Sheet1上点击右键并select一个选项“查看代码”。 我从Microsoft Visual Basic for Applications菜单上单击“插入”button并加载文件C:\VBA_MACROS\VBA1.txt 。 我closures了VBA代码窗口。 问题:步骤2 – 4是否可以通过C#代码以及步骤1自动执行? 在这种情况下,用户不必手动执行,这对她来说会更舒适。 确切地说,这是如何创build应用程序: Excel.Application application = new Excel.Application(); Excel.Workbook workbook = application.Workbooks.Add(); Excel.Worksheet worksheet = workbook.Sheets[1]; Excel.Worksheet worksheet2 = workbook.Sheets[2]; // output data to the worksheets DataTable2Worksheet(tableMain, worksheet, verSize); DataTable2Worksheet(tableExtra, worksheet2, 0); // output workbook to the file string […]

如何获得Excel单元格的“名称框”名称?

我在Excel中有一个单元格,通过使用Excel名称框将variables名称this_cells_name分配给单元格D2 。 以下是Excel名称框的一个例子: 我希望能够指向该单元格并获取作为返回值的variables名称。 我知道如何做到以下几点: 使用=CELL("address",D2)并获得"$D$2"作为返回值, 使用=CELL("address",this_cells_name)并获得"$D$2"作为返回值。 我想要做到以下几点: 使用=some_function(D2)并获取"this_cells_name"作为返回值。 我怎样才能做到这一点? VBA解决scheme将会很好。

删除子string,但保留格式

我有一小部分代码将从我select的单元格中删除子string垃圾 : Sub RemoveJunk() Dim r As Range For Each r In Selection r.Value = Replace(r.Value, "junk", "") Next r End Sub 代码有效,但是会破坏单元格中剩余字符的格式。 所以,如果我开始: 我结束了: 有没有办法避免干扰字符的格式?

用Worksheet_SelectionChange重写条件格式

我有一些工作表中的代码来突出显示所选单元格的行。 但是,此工作表具有对某些行进行着色的条件格式。 突出显示macros不符合格式条件满足的行(在高亮颜色不覆盖条件格式的颜色的意义上)。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.Interior.ColorIndex = xlColorIndexNone ActiveCell.EntireRow.Interior.ColorIndex = 19 'Highlight row End Sub 有没有人知道一个解决方法,而不删除条件格式? 例如。 我可以暂时禁用一个选定的行,并重新启用它时,该行是不被选中? 格式是应用于所有单元格的一个规则。 我理论上可以为每一行创build一个独立的规则(~500个),然后完全closures它,稍后再重新应用它,但这看起来有点过分。

VBA电子邮件粘贴图表和正文中的文本

以下代码的目标是将选定的图表粘贴到我的文本下方的电子邮件正文中 。 但是,它仍然粘贴在我的文字上方。 我怎样才能改变它,使其粘贴下面? 谢谢! Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .CC = "xyz@anc.com" .BCC = "abc@xyz.com" .Subject = "Test" .Body = "Dear" & "Macro " ActiveSheet.Range("P36:X46").Copy Set wEditor = OutApp.ActiveInspector.WordEditor wEditor.Application.Selection.Paste .display